return result;
6.4 非 UI 标签
6.4.1 数据标签
数据标签是标签中特殊的一种,用来设定一些特殊的变量以及值,供页面使用。有些时 候在编写 JSP 页面的时候要用到循环,要使用循环变量,这个时候就需要数据标签来设定一 个循环变量。数据标签具体包含设定变量值的 Set 标签,显示错误的 actionerror 标签等。这 些标签整合了一些常用的数据和集合,以及它们的操作。
表 6-1 数据类标签列表
标签名称 描述
set 设定变量
actionerror 呈现 ActionError
date 呈现日期
actionmessage 呈现 ActionMessage
property 显示值栈里的变量
fielderror 显示字段错误
push 将某值压栈
param 参数化其它标签
Bean 实例化 bean 并放入上下文
下面选取在实际中经常应用到的 property,set,bean,push,date 进行介绍。
property 标签
属性标签是用来获取 ActionContext 中的属性的一些标签,使用此标签用户能够取得 ActionContext 中的一些成员变量,然后做相应的处理。例如在 Action 里面设定了 name 这样 的成员变量,那么在页面中就可以使用标签获取此成员变量的值。
<s:property value=”#request[‘apple’].price”/><!-获取 Request 对象中的 Apple 类的 price 属性 ->
<s:property value=”#request[‘apple’].weight”/><!-获取 Request 对象中的 Apple 类的 weight 属性->
set 标签
scope String 否 作用域:application,session,request,page 或 default
id String 否 在作用域内的标签的标识
为了引用某一个变量而输入很长的变量名是很麻烦的,用户可以这样做
<!—为 apple 变量对象设定值为 Request 中的 apple-->
<s:set name=”apple” value=”#request[‘apple’]/>
<s:property value=”#apple.price”/><!—获取 apple 的 price 属性-->
<s:property value=”#apple.weight”/><!—获取 apple 的 weight 属性-->
bean 标签
可以使用 bean 标签创建简单的 javaBean 并把它压入值栈,这适合于一些比较复杂的应 用场合,通过赋值还可以在 ActionContext 中访问这个 javaBean。
表 6-4 bean 标签的属性
<!--使用 example.user 这个 javaBean,并为其设置 name 属性和 gender 属性-->
<s:bean name=”example.user”>
<s:param name=”name” value=”’Albert’”/>
<s:param name=”gender” value=”’female’”/>
</s:bean>
在这段代码中声明并使用了一个 JavaBean,并且为其设置了相应的值,如果在页面中要使 用这样的模型元素那么使用 Bean 标签是十分可取的做法。
push 标签
push 标签可以把程序员在 ActionContext 中引用的对象压入值栈。这进一步简化了访问 某一个对象属性的时候需要的操作。不需要每访问一个成员变量都要加上对象名称了。 public class user {
private Date birthdate;
//定义构造函数 public user(){
this.birthdate= new Date();
}
public Date getBirthdate() { return birthdate;
}
public void setBirthdate(Date birthdate) { this.birthdate = birthdate;
}
}
这是一个为页面提供一个日期的 Action,通过定义一个遵循 JavaBean 规范的属性,并 且在 Action 执行过程中初始化它,这样在页面中就可以通过多种手段调用这个日期。页面 源代码如下:
Data.jsp
<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>This is the Illustration of Data Tags</title>
</head>
<body>
<%
//定义一个新的 user 对象,并将其放入 session example.user u= new example.user();
session.setAttribute("user",u);
%>
<hr>
<p >
Next is a push Tag example:
//使用 set 标签定义一个 user 变量直接访问刚才保存的 user 对象
<s:set name="user" value="#session['user']"/>
//将 user 对象压入值栈,以便直接访问属性
<s:push value="#user">
The user's birthday is: <s:property value="birthdate"/><br/>
</s:push>
</p>
<p >
Next is a Bean Counter Example <br>
//引用 counter 类并为其初始化
<s:bean name="org.apache.struts2.util.Counter" id="counter">
<s:param name="last" value="5"/>
</s:bean>
<p>
Next is a Date Tag Example<br>
//使用 Date 标签格式化输出时间
The time now is:<s:date name="#user.birthdate" format="EEE, d MMM yyyy HH:mm:ss Z"/><br>
//当 nice 属性设置为 true 的时候 Date 标签的输出效果
With nice attribute set true,The Tag effect is: <s:date name="#user.birthdate" nice="true"/>
</p>
</body>
</html>
通过综合使用上述数据标签,笔者向大家展示了如果在页面设计的过程中,在页面中插 入日期,通过 date 标签对日期进行各种不同要求的格式化,以期使其符合应用的具体需求。
同时笔者还使用了一个 counter bean 标签,向大家展示了如何在页面中使用一个 bean。如果 配置正确,运行后的结果如图 6-3 所示。
图6-3 数据标签示例的页面