Struts2框架的标签库可以分为以下三类:
用户界面标签(UI标签):主要用来生成HTML元素的标签。
表单标签:主要用于生成HTML页面的FORM元素,以及普通表单元素的标签。
非表单标签:主要用于生成页面上的tree,Tab页等。
非用户界面标签(非UI标签):主要用于数据访问,逻辑控制。
数据访问标签:主要包含用于输出值栈(ValueStack)中的值,完成国际化等功能的标签。
流程控制标签:主要包含用于实现分支,循环等流程控制的标签。
AJAX标签:用于支持Ajax效果
Struts2标签语法:
Struts2的标签都支持动态数据的访问,标签的属性都可以使用OGNL表达式,Struts2标签的属性具有类型,这些类型可以简单地分为字符串类型和非字符串类型(视为变量名称),对于字符串类型的属性,如果要访问动态数据(变量值),需要使用%{… }这样的语法,
例如:<s:include value=“%{ url }” /> (url为变量名称)
对于非字符串类型的属性值,将直接作为OGNL表达式进行求值。
例如:<s:property value=“userName”/> (可以认为userName为变量名称)
property标签的value属性是Object类型,它的值userName将作为OGNL表达式进行求值,结果是值栈中位于栈顶的对象的userName属性的值。如果要为非字符串类型的属性直接指定字符串数据,那么需要使用OGNL中的字符串常量,即用单引号(‘)或双引号(“)将字符串括起来。
例如:<s:property value=“’zhangsan‘”/>
value属性的值‘zhangsan’作为字符串常量,计算结果就是zhangsan,因此输出zhangsan。
除上述用法之外,也可以使用%{…}这样的语法来指定字符串常量。
例如: <s:property value=“%{ ‘zhangsan’ }”/>
在这种情况下,%{ }将被忽略,花括号中的内容将作为表达式被计算。
总结一下,Struts2标签的属性按照下列的三个规则进行计算。
(1)所有的字符串属性类型都会解析“%{…}”这样的语法。
(2)所有的非字符属性类型都不会被解析,而是直接被看作一个OGNL表达式进行求值
(3)对于第二个规则的例外情况是,如果非字符串属性使用了“%{…}”语法,那么%{…}将被忽略,花括号中的内容将作为表达式计算。
创建MessageAction类:
package action;
import com.opensymphony.xwork2.ActionSupport;
public class MessageAction extends ActionSupport {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
message="Hello!!";
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:label value="message"/><br/>
<s:label value="'message'"/><br/>
<s:label value="%{message}"/><br/>
<s:label name="message"/><br/>
<s:property value="message"/><br/>
<s:property value="'message'"/><br/><!-- 将value值当字符串输出 -->
<s:property value="%{message}"/><br/>
<s:property value="%{csdn}"/>
</body>
</html>
结果: