文章目录
- Struts2的标签
- 通用(Generic)标签
- <s:property> 数据类标签
- <s:iterator>(至关重要!!!!)
- <s:if> <s:elseif> <s:else>
- <s:a>超链接标签
- 用户界面(UI)标签
- 表单标签
- 主题样式
Struts2的标签
表单标签将在 HTML 文档里被呈现为一个表单元素
使用表单标签的优点: 表单回显
标签的属性可以被赋值为一个静态的值或一个 OGNL 表达式. 如果在赋值时使用了一个 OGNL 表达式并把它用 %{} 括起来, 这个表达式将会被求值.
通用标签库(控制标签、数据标签):
表单标签
通用(Generic)标签
通用标签主要指两类:数据类标签和控制类标签。
<s:property> 数据类标签
作用:将 OGNL 表达式的内容输出到页面
属性:
value 属性,接收 OGNL 表达式,从值栈取值
default 属性:显示默认值,如果当通过 OGNL 表达式没有获取到值,default 设置显示默认值
escapeHtml 属性:是否对 HTML 标签转义输出 (默认是不转义 true,可以关闭)
Action
package com.igeek_01;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class TagAction1 extends ActionSupport{@Overridepublic String execute() throws Exception {//往值栈中放入数据ActionContext.getContext().put("name", "tom");ActionContext.getContext().put("table", "<table border='1'><tr><td>html代码</td></tr></table>");return SUCCESS;}
}
jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><h3>s:property从map栈中获取数据</h3><s:property value="#name"/><h3>s:property default属性</h3><s:property value="#age" default="0"/><h3>s:property escapeHtml属性,是否对html标签转义,默认不转义(true) </h3><s:property value="#table" escapeHtml="false"/>
</body>
</html>
<s:iterator>(至关重要!!!!)
作用:遍历集合对象(可以是 List、set 和数组等),显示集合对象的数据。(跟 jstl 的<c:foreach>功能一样)
属性:
value:迭代的集合,支持 OGNL 表达式,如果没有设置该属性,则默认使用值栈栈顶的集合来迭代。
var:引用变量的名称,该变量是集合迭代时的子元素。
status:引用迭代时的状态对象 IteraterStatus 实例,其有如下几个方法:int getCount():返回当前迭代了几个元素;int *getIndex*():返回当前迭代元素的索引;boolean odd:返回当前迭代元素的索引是否是奇数boolean even:返回当前迭代元素的索引是否是偶数boolean isFirst():返回当前迭代元素的索引是否是第一个boolean isLast():返回当前迭代元素的索引是否是最后一个
jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><h3>使用s:iterator 打印1-10 数字</h3><h4>把每个遍历到的值存在map栈中,变量名定义为num</h4><h4>把每个遍历到的值也存在root栈中</h4><h4>把每个遍历到值的状态也是存在map栈中,变量名定义为s</h4><s:iterator begin="1" end="10" var="num" status="s" ><s:property value="#num"/>--<h4>把每个遍历到的值也存在root栈中</h4><s:property value="top"/>--<s:property value="[0].top"/>--<h4>把每个遍历到值的状态也是存在map栈中,变量名定义为s</h4><s:property value="#s.index"/>--<s:property value="#s.count"/>--<s:property value="#s.odd"/>--<s:property value="#s.even"/>--<s:property value="#s.isFirst()"/>--<s:property value="#s.isLast()"/>--<br/></s:iterator><hr><h3>s:iterator 遍历集合对象</h3><h4>s:iterator value属性获取值栈中的集合对象</h4><s:iterator value="users" var="u"><s:property value="#u.username"/>--><s:property value="#u.pwd"/>--<s:property value="username"/>--><s:property value="pwd"/>--<s:property value="top.username"/>--><s:property value="top.pwd"/>--<s:property value="[0].top.username"/>--><s:property value="[0].top.pwd"/>--${u.username }-->${u.pwd }<br/></s:iterator>
</body>
</html>
Action
package com.igeek_01;
import java.util.ArrayList;
import java.util.List;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class TagAction2 extends ActionSupport{@Overridepublic String execute() throws Exception {List<User> users = new ArrayList<>();users.add(new User("tom", "123"));users.add(new User("jerry", "123"));users.add(new User("rose", "123"));//把数据放入值栈ActionContext.getContext().getValueStack().set("users", users);return SUCCESS;}
}
<s:if> <s:elseif> <s:else>
作用:页面判断,其中的 test 属性可以接收 OGNL 表达式。
根据后台传入的用户状态值(0,1,2),在页面判断并显示中文(管理员、普通用户、游客)
Action
package com.igeek_01;import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;public class TagAction3 extends ActionSupport{private String role;public String getRole() {return role;}public void setRole(String role) {this.role = role;}@Overridepublic String execute() throws Exception {//把role值放入值栈ActionContext.getContext().getValueStack().set("role", role);return SUCCESS;}
}
jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><h3>s:if 标签</h3><s:if test="role==0"><h3>管理员</h3></s:if><s:elseif test="role==1"><h3>普通用户</h3></s:elseif><s:else><h3>游客</h3></s:else>
</body>
</html>
<s:a>超链接标签
作用:生成 a 标签链接
JSP
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><h3>超链接标签 s:a</h3><h3>s:param参数标签</h3><s:a action="tag3" namespace="/"><s:param name="role">0</s:param>//参数tag3.action</s:a>
</body>
</html>
用户界面(UI)标签
用户界面标签主要包括两类:表单类标签和其他类标签
form 表单的 Struts2 标签和传统标签的对比:(参考)
表单标签
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><h3>struts2 form表单</h3><s:form action="tag3" method="get"><h3>文本框 <s:textfield name="username"></s:textfield> </h3><h3>密码框 <s:password name="pwd"></s:password> </h3><h3>隐藏域<s:hidden name="hide" value="hide"></s:hidden> </h3><h3>文本域<s:textarea name="content"></s:textarea></h3><hr/><h3>单选按钮<s:radio list="{'男','女'}" name="sex"></s:radio> </h3><h3>单选按钮1<s:radio list="#{'m':'男','f':'女'}" name="sex"></s:radio> </h3><h3>复选框<s:checkboxlist list="{'篮球','足球','看书'}" name="hobby"></s:checkboxlist> </h3><h3>复选框1<s:checkboxlist list="#{'basketball':'篮球','football':'足球','read':'看书'}" name="hobby1"></s:checkboxlist> </h3><h3>下拉框:<s:select list="{'上海','北京','东京'}" name="city"></s:select> </h3><h3>下拉框1:<s:select list="#{'1':'上海','2':'北京','3':'东京'}" name="city"></s:select> </h3><s:submit value="提交"></s:submit><s:reset value="重置"></s:reset></s:form>
</body>
</html>
主题样式
Struts2 模板文件,支持两种 Freemarker 生成 (.ftl 模板文件) , Velocity 生成 (.vm 模板文件)
提供四种主题 :
Simple 最简单主题
Xhtml 通过 布局表格 自动排版 (默认主题 )
css_xhtml 通过 CSS 进行排版布局
ajax 以 Xhtml 模板为基础,增加 ajax 功能
<!-- 修改主题风格为简单主题 -->
<constant name="struts.ui.theme" value="simple"></constant>