文章目录
- 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{
@Override
public 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{
@Override
public 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;
}
@Override
public 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>