介绍

当您使用一个Struts 2标签时,例如 <s:select ..../>  在您的web页面中,Struts 2框架会生成HTML,它会显示外观并控制select控件的布局。样式和布局取决于为标签们设置的Struts 2主题。Struts 2有三个内置的主题:简单、xhtml和cssxhtml。如果您没有指定主题,那么Struts 2将默认使用xhtml主题。

本帖地址 struts2官方 中文教程 系列十四:主题Theme 即 http://www.cnblogs.com/linghaoxinpian/p/7047347.html

先看一段代码

<s:select key="personBean.sport" list="sports" />

生成

<tr>
<td class="tdLabel">
<label for="save_personBean_sport" class="label">最喜欢的运动:</label>
</td>
<td>
<select name="personBean.sport" id="save_personBean_sport">
<option value="football">football</option>
<option value="baseball">baseball</option>
<option value="basketball" selected="selected">basketball</option>
</select>
</td>
</tr>

注意HTML是如何使用表格标签来控制布局和选择HTML的。还有一个类tdLabel,应用于显示表的列。由于没有为Struts 2选择标签指定任何主题,因此使用了默认的xhmtl主题。

指定Struts2应使用的主题

Struts 2标记有一个主题属性,您可以使用它来指定在为该标签创建HTML时应该使用哪个Struts 2主题。主题属性的值很简单,xhtml, css_xhtml, and ajax。可以参见  Themes and Templates Documentation 了解更多信息。本章将了解 xhtml, css_xhtml, 和 the simple themes ,ajax主题应在进行ajax操作时使用(可以参见  Ajax Theme in the documentation)。

您可以在每个Struts 2标签上指定主题,或者您可以使用下列方法之一指定主题Struts 2应该使用什么:

  1. 在标签上使用 theme属性

  2. The theme attribute on a tag’s surrounding form tag

  3. 在page域内有名为“theme”的属性(The page-scoped attribute named “theme”)

  4. 在request域中有名为“theme”属性(The request-scoped attribute named “theme”)

  5. 在session域中有名为“theme”属性(The session-scoped attribute named “theme”)

  6. 在application域中有名为“theme”属性(The application-scoped attribute named “theme”)

  7. 在 struts.properties中的struts.ui.theme属性(默认为xhtml)

有关如何使用上述方法设置主题的主题,请参考 Selecting Themes

将表单标签的主题属性更改为xhtml。当您查看edit.jsp的源代码时,请注意在浏览器显示了jsp之后,有一个名为tdLabel的类被应用到包含标签的表列中(<td class="tdLabel">)。这个CSS类控制表列中标签的位置。tdLabel样式是在/theme/struts/xhtml/styles.css中定义的。

将表单的主题属性更改为 simple ,并重新部署应用程序。检查源代码 edit.jsp在浏览器中呈现之后。您应该看到没有Form标签控制布局,而且也没有用于文本字段的Label 标签。

当你将  <s:head /> 标签添加进jsp页面时,这个css样式将会被引进。将表单的主题属性更改为 cssxhtml,并重新部署应用程序。检查源代码 edit.jsp 在浏览器中呈现之后。表单标签的布局现在由div标签控制,Label 标签又回来了。

可以通过访问 http://localhost: 8080/themes/struts/xhtml/styles.css  可以看到以下内容(题主木有测试成功):

styles.css

.label {font-style:italic; }
.errorLabel {font-style:italic; color:red; }
.errorMessage {font-weight:bold; color:red; }
.checkboxLabel {}
.checkboxErrorLabel {color:red; }
.required {color:red;}
.tdLabel {text-align:right; vertical-align:top; }

当然你也可以覆盖默认的一些样式

<style type="text/css">
.label {color:blue; font-style:normal; font-weight:bold}
</style>

创建自己的主题

在 Struts 2 core jar 文件中我们可以看见 名为 template.css_xhtml, template.simple, and template.xhtml 三个文件夹,这三个文件夹包含了struts2的三个默认主题,每一个文件夹都是一个struts2的标签。例如你打开  template.xhtml 文件夹,将会看到select.ftl 文件,注意后缀为  .ftl

Struts 2框架使用FreeMarker模板引擎为Struts 2标签生成HTML。这就是为什么文件扩展名是 “ftl” 。您可以通过访问http://freemarker.sourceforge.net/.来了解更多关于FreeMarker的信息。

后面是自定义主题模版,估计不怎么用,若题主有幸在项目中用到的话,再来补上吧。

总结

我们可以很容易的重写struts2的默认主题样式,以便控制struts2标签的外观。每一个struts2标签都与一个模板文件相关联(如  select.ftl ),它位于一个以主题命名的文件夹中。默认情况下,struts2框架将会在struts core jar文件中寻找主题文件和模板。更多信息可以参见 Themes and Templates Documentation .

struts2官方 中文教程 系列十四:主题Theme的更多相关文章

  1. struts2官方 中文教程 系列十二:控制标签

    介绍 struts2有一些控制语句的标签,本教程中我们将讨论如何使用 if 和iterator 标签.更多的控制标签可以参见 tags reference. 到此我们新建一个struts2 web 项 ...

  2. struts2官方 中文教程 系列十:Form标签

    介绍 在本教程中,我们将探索其他Struts 2表单控件.在前面的教程中,我们介绍了如何使用Struts 2表单(处理表单.表单验证和消息资源文件),我们介绍了如何使用Struts 2 head, f ...

  3. struts2官方 中文教程 系列十三:利用通配符选择方法

    介绍 在本教程中,我们将介绍如何在struts.xml中配置action节点以达到仅使用一个action节点将几个不同的url关联到特定action类的特定方法.这样做的目的是减少struts.xml ...

  4. struts2官方 中文教程 系列十一:使用XML进行表单验证

    在本教程中,我们将讨论如何使用Struts 2的XML验证方法来验证表单字段中用户的输入.在前面的教程中,我们讨论了在Action类中使用validate方法验证用户的输入.使用单独的XML验证文件让 ...

  5. struts2官方 中文教程 系列九:Debugging Struts

    介绍 在Struts 2 web应用程序的开发过程中,您可能希望查看由Struts 2框架管理的信息.本教程将介绍两种工具,您可以使用它们来查看.一个工具是Struts 2的配置插件,另一个是调试拦截 ...

  6. struts2官方 中文教程 系列八:异常处理

    在本教程中,我们将探讨如何启用Struts 2框架处理web应用程序生成的任何未捕获的异常.Struts 2提供了健壮的异常处理,包括能够自动记录任何未捕获的异常,并将用户重定向到错误web页面. 贴 ...

  7. struts2官方 中文教程 系列七:消息资源文件

    介绍 在本教程中,我们将探索使用Struts 2消息资源功能(也称为 resource bundles 资源绑定).消息资源提供了一种简单的方法,可以将文本放在一个视图页面中,通过应用程序,创建表单字 ...

  8. struts2官方 中文教程 系列五:处理表单

    先贴个本帖的地址,免得其它网站被爬去了struts2教程 官方系列五:处理表单  即 http://www.cnblogs.com/linghaoxinpian/p/6906298.html 下载本章 ...

  9. struts2官方 中文教程 系列三:使用struts2 标签 tag

    避免被爬,先贴上本帖地址:struts2 官方系列教程一:使用struts2 标签 tag http://www.cnblogs.com/linghaoxinpian/p/6901316.html 本 ...

随机推荐

  1. 【[AHOI2006]文本编辑器】

    题目 多了区间翻转,之后没了 区间翻转的标记记得在\(kth\)的时候下传 代码 #include<algorithm> #include<iostream> #include ...

  2. 【[SCOI2012]喵星球上的点名】

    好题啊 \(SA+ST\text{表}+\text{莫队}\) 我们先强行把所有的串连起来,串与串之间插入特殊字符,姓和名之间也插入特殊字符 之后跑一遍\(SA\),求出\(sa\)和\(het\) ...

  3. [18/12/03] 多态(polymorphism)和对象的转型(casting)

    一.多态 多态指的是同一个方法调用,由于对象不同可能会有不同的行为.现实生活中,同一个方法,具体实现会完全不同. 比如:同样是调用人的“休息”方法,张三是睡觉,李四是旅游,同样是调用人“吃饭”的方法, ...

  4. 对枚举数据类型使用switch

  5. build.gradle中的dependencies

    demo_myna中的build.gradle中的dependencies是依赖项目.比如之前开发的一个项目A,现在新的项目B要使用项目A的功能,那么把项目A作为类库关联进来,这样b就能直接使用A的功 ...

  6. 【luogu P3901 数列找不同】 题解

    对于区间查询的问题,提供一种思路: 莫队. 莫队是处理区间问题的乱搞神器,尤其是对于离线查询问题,当然也可以做在线查询,比如带修莫队. 对于有的题,莫队是乱搞骗分,而在某些地方,莫队是正解. 这道题来 ...

  7. 解决 Your project contains error(s),please fix them before running your applica ..

    解决 Your project contains error(s),please fix them before running your application问题 http://www.cnblo ...

  8. Android学习笔记_32_通过WebView实现JS代码与Java代码互相通信

    webview两种实现方法,覆盖onKeyDown()方法 缓存 WebSettings应用注意的几个问题 1.要实现JS代码与Java代码互相通信,需要通过Android的WebView控件,在视图 ...

  9. CSS3 小会

    -webkit-perspective:800px;   其子元素获得3D元素支持,这里是设置子元素距离试图的位置:若设为0 则不支持子元素获得3d效果,不支持透视. 常与transform:rota ...

  10. android 多线程 异步消息处理 服务 学习笔记 (六)

    三种多线程编程方法 1 class Mythread extends Thread{ @Override public void run(){} } new Mythread().start() 2 ...