Struts2通用标签:
Struts2中通用标签可以分为二类:控制标签和数据标签。控制标签用于呈现页面时控制执行流程,数据标签用于访问值栈中的数据。
数据标签:用于访问ActionContext和值栈中的数据。数据标签包括:
property set push param bean action include
url a i18n text date debug
控制标签:用于在呈现结果页面时控制程序的执行流程,根据程序执行的状态输出不同的结果,控制标签包括下列标签:
if/elseif/else iterator append merge
generator subset sort
数据标签-----property标签:
property标签用于输出值栈中的对象的属性(property)值,使用value属性来指定要输出的对象属性,如果没有指定value属性,那么默认输出栈顶对象。property标签属性
数据标签-----set标签:
Set标签将一个值赋给指定范围内变量。Set标签在某些情况下是比较有用的,例如在页面中多次引用一个复杂的表达式,我们可以将这个表达式赋给一个变量,然后直接引用变量。带来的好处就是:
提升了性能(表达式的计算只有一次)
提高了代码的可读性。
创建User类:
package model;
public class User {
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
创建MessageAction类:
package action;
import model.User;
import com.opensymphony.xwork2.ActionSupport;
public class MessageAction extends ActionSupport {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
user=new User();
user.setName("csdn");
user.setAge("20");
return SUCCESS;
}
}
配置文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="hello" namespace="/hello" extends="struts-default">
<action name="message" class="action.MessageAction">
<result name="success">/index.jsp</result>
</action>
</package>
</struts>
Index页面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
<s:set name="xxx" value="user.name"/>
<s:property value="xxx"/>
<s:property value="#request.xxx"/>
</body>
</html>
结果:
csdn csdn
数据标签-----param标签:
param标签被用作其他标签的子标签,用于为其他标签提供参数,例如:为bean标签和include标签提供参数
当使用param标签时, 参数的值可以通过value属性给出,也可以在标签体中给出(开始标签和结束标签之间的文本)。这二种用法有一些区别。我们看下面的例子:
<param name=“color”>blue</param> <!-- (1) -->
<param name=“color” value=“blue” /> <!-- (2) -->
在第(1)种情形中,参数值将作为java.lang.String对象(即字符串)被放入栈中;
在第(2)种情形中,参数值将作为表达式进行计算,如果blue不存在,则color参数的值为null。
在第(1)种情形中,要为color指定字符串值,可以写为:
<param name=“color” value=“ ‘ blue ‘ ”/>或者<param name=“color” value=“%{‘ blue ‘ }“/>
使用单引号包围字符串,表明这是一个字符串常量
数据标签-----bean标签:
bean标签用于实例化一个JavaBean对象(必须遵照JavaBean规范),bean标签的标签体内可以包含多个param标签,用于设置Bean的属性(必须有相应的setter方法)。如果指定了id属性(Struts2.2.1.1已经不建议使用,使用var属性替代),则创建的Bean实例将被放入到OgnlContext中。
注意:
id属性是可选的,无论是否指定id属性,bean标签创建的JavaBean实例都会被压入到值栈的顶部,在bean标签内部可以直接访问创建的对象,无须使用”#”标记,当bean标签结束的时候,bean标签创建的实例将从值栈中删除。
如果指定了id属性,那么bean标签创建的JavaBean实例还将被放到OgnlContext中,这样在bean标签的外部,也可以访问创建的对象了,不过此时就要使用”#”标记了。
index页面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
<s:bean name="model.User">
<s:param name="name" value="'csdn'"/>
<s:param name="age" value="'20'"/>
<s:property value="name"/>
<s:property value="age"/>
</s:bean>
</body>
</html>
结果:
csdn 20
数据标签-----include标签:
在jsp2.jsp中,我们使用JSP的EL表达式来获取传的请求参数。
#parameters引用的实质是一个Map对象,并不等同于HttpServletRequest对象。
在包含页面时,如果页面中有中文,将会出现乱码,要解决这个问题,可以在Struts.xml文件中配置Struts.i18n.encoding属性,如下:
<constant name=“Struts.i18n.encoding” value=“gbk” />
Index页面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
<s:include value="include.jsp">
<s:param name="name" value="'csdn'"/>
<s:param name="age" value="'22'"/>
</s:include>
</body>
</html>
Include页面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'include.jsp' starting page</title>
</head>
<body>
${param.name }
${param.age }
</body>
</html>
结果:
csdn 22