术语 | 描述 |
---|---|
tag(标签) | 从JSP,FreeMarker或Velocity内部执行的一小段代码。 |
template(模板) | 一些代码,通常是写在FreeMarker上的,可以由某些标签(HTML标签)呈现。 |
theme(主题) | 封装在一起以提供公共功能的模板集合。 |
当你在Web页面中使用Struts2 标签(如<s:submit…>,<s:textfield…>等)时,Struts2 框架会生成具有预配置样式和布局的HTML代码。Struts2 具有三个内置主题:
Theme(主题) | 描述 |
---|---|
simple theme | 没有“bells and whistles”的最小主题。例如,textfield标签呈现HTML标签无标记、验证、错误报告或任何其他格式或功能。 |
xhtml theme | 这是Struts 2使用的默认主题,提供了simple theme具备的所有基础,并添加了几个功能,如HTML的标准两列表布局、每个HTML的标记、验证和错误报告等。 |
css_xhtml theme | 这个主题提供了simple theme具备的所有基础,并添加了几个功能,如基于CSS的标准两列布局,对HTML Struts标签使用
,HTML Struts每个标签的标记,根据CSS样式表放置等。
|
前言
本文是参考自一个网站后实践做的笔记
https://www.w3cschool.cn/struts_2/struts_themes_templates.html
如何设置主题
直接设置属性
<s:textfield name="name" theme="xhtml"></s:textfield>
我们可以通过设置一个index.jsp和一个简单的action(ps:action随便定义都行,本次测试struts.xml中定义的action为paly)来处理一下
index.jsp内容如下
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<s:form action="play" method="post">
名称:<s:textfield name="name" theme="xhtml" ></s:textfield>
<s:submit value="提交"/>
</s:form>
</body>
</html>
页面访问结果如下
网页源码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form id="play" name="play" action="/ssh_learn_topicAndModule/play.action" method="post">
<table class="wwFormTable">
名称:<tr>
<td class="tdLabel"></td>
<td
><input type="text" name="name" value="" id="play_name"/></td>
</tr>
<tr>
<td colspan="2"><div align="right"><input type="submit" value="提交" id="play_0"/>
</div></td>
</tr>
</table></form>
</body>
</html>
经过比较得知:
<s:textfield name="name" theme="xhtml" ></s:textfield>
其实最后在前端页面中显示是这样的,这里的id是根据你的action来生成的。
<tr>
<td class="tdLabel"></td>
<td
><input type="text" name="name" value="" id="play_name"/></td>
</tr>
本质
如何实现从s:xxx到一段新的代码块呢?这依赖于我们所拉取的这个jar包————struts2-core.x.y.z.jar文件。我们可以试着解压缩看看里面的内容。
对于给定的主题,每个struts标签都有一个关联的模板,如s:textfield -> text.ftl和s:password -> password.ftl等。这些模板文件压缩在struts2-core.x.y.z.jar文件中,它们为每个标签保留预定义的HTML布局。因此Struts2 框架使用Sturts标签和相关模板生成最终的HTML标记代码。
解压缩之后可以看到里面有个template文件夹
Struts 2 tags + Associated template file = Final HTML markup code
struts2标签+关联的模板文件=最终的HTML标记代码
默认模板的样式为:扩展名.ftl
最后说一句
其实我感觉你设置这种样式不如直接设置标签的style,这样也ok的,而且不同情况下基本都是要不同的样式,所以我觉得用处不大…