数据标签:用于实现获得或访问各种数据的功能
1.action标签
(1)executeResult:可选属性,为一个Boolean类型值,用来指定是否显示action的执行结果,默认值为false,即不显示。
(2)id:可选属性,用来引用该action的标识。
(3)name:必填属性,用来指定该action的实现类位置。
(4)namespace:可选属性,用来指定该标签调用的action所在的命名空间。
(5)ignoreContextParams:可选属性,用来指定该页面中的请求参数是否需要传入调用的action,默认值为false,即将本页面的请求参数传入被调用的action。
TagAction.java
public class TagAction extends ActionSupport{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String execute()throws Exception{
return "ok";
}
public String login() throws Exception{
ServletActionContext.getRequest().setAttribute("name", getName());
return "ok";
}
}
struts.xml
<include file="struts-default.xml"/>
<package name="ch4" extends="struts-default" namespace="/tags">
<action name="tag1" class="ch4.TagAction">
<result name="ok">succ.jsp</result>
</action>
<action name="tag2" class="ch4.TagAction" method="login">
<result name="ok">loginSucc.jsp</result>
</action>
</package>
succ.jsp
<body>
调用Action!!
</body>
loginSucc.jsp
<body>
<s:property value="#request.name"/>登录成功!
</body>
调用Action的界面
<body>
<s:action name="tag1" executeResult="true" namespace="/tags" /><hr/>
<s:action name="tag2" executeResult="true" ignoreContextParams="false" namespace="/tags" /><hr/>
<s:action name="tag2" executeResult="true" ignoreContextParams="true" namespace="/tags" /><hr/>
<s:action name="tag2" executeResult="false" ignoreContextParams="false" namespace="/tags" /><hr />
<s:property value="#request.name"/>
</body>
在url后输入?name=aa
2.bean标签
用于在当前页面中创建JavaBean实例对象,可嵌套param标签,为该JavaBean实例化属性值
name:必选属性,用来指定可以实例化JavaBean的实现类
id:可选属性,指定后可通过id访问该实例。
这里就用了之前写的Book.java
当需要输入字符串时,需加 ‘ ’;
price是double,这里故意输错,发现并没有输出,如果将图书单价的value改为23.4,会正常输出。
图书数量是int型,没有赋值,所以输出了int的初值0。
<s:bean name="ch3.Book" id="book">
<s:param name="name" value="'Book1'" />
<s:param name="price" value="'Book1'" />
</s:bean>
图书名称:<s:property value="#book.name"/>
图书单价:<s:property value="#book.price"/>
图书数量:<s:property value="#book.num"/>
3.debug标签
用于辅助调试,通过该标签可以在页面上生成一个链接,单击链接可查看当前ValueStack和Stack Context中的所有信息。
4.include标签
用于将Jsp或Servlet等资源内容包含到当前界面中,可以嵌套param标签,实现将当前页面的参数传给被包含的页面。
value:必选属性,用于指定被包含的JSP或Servlet等资源文件。
id:可选属性,用于指定该标签的引用ID。
includefile.jsp
<h3>被包含界面</h3>
传递的值为:<% out.println(request.getParameter("user")); %>
includeTag.jsp
<h1>这里是主界面</h1>
<s:include value="includefile.jsp">
<s:param name="user" value="'Hello'"/>
</s:include>
5.param标签
通常与其他标签结合使用,用于给其他标签提供参数。
如果要传递字符串,需要加单引号。
两种用法:
<s:param name="user">Hello</param>
<s:param name="user" value="'Hello'"/>
6.property标签
用于输出value属性指定的值
default:用于指定属性值为null时输出的值。
escape:用于指定是否显示标签代码
value:用于指定要输出的属性值
id:用于指定该元素的引用ID。
前面已使用多次,所以就不举例了。
关于value何时用#何时不用#,请阅读记录:s:property 标签——value属性使用事项
7.set标签
用于定义一个新的变量,并把一个已有的变量值复制给该新变量,同时可将该新变量放到指定范围内,例如application范围和session范围等。
name:用于定义新变量的名字。
scope:用于定义新变量的使用范围,可选值有application、session、request、response、page和action。
value:用来定义将要赋给新变量的值。
id:用来定义该元素的引用ID。
<s:set name="testName" value="'Struts 2'"/>
testName:<s:property value="#testName"/>
<h3>设置一个新变量</h3>
<s:bean name="ch3.Book" id="book">
<s:param name="name">Book</s:param>
</s:bean>
<s:set value="#book" name="user" scope="action"/>
<s:property value="#attr.user.name"/>
<s:set value="#book" name="user" scope="session"/>
<s:property value="#session.user.name"/>
首先给一个新的变量赋值并输出,再定义一个Book实例,并放到action和session范围内并输出。
#attr 是ognl表达式,用于访问上下文数据的,按照page->request->session->application的顺序搜索。
7.url标签
用来生成一个URL地址,可以通过嵌套param标签来为URL指定发送参数。
action:用来指定一个action作为URL的地址值,如果没有给出,那么url使用value的值来指定action,如果都有,使用value的值
value: 用来指定URL的地址值
includeParams: 该属性有三个值:none get all,默认值为get。当该属性值为get时,该url会将访问其所在jsp的请求的所有get方法的参数添加到自身来当它的属性值,为all时将get和post的的参数值全部添加到自身。一般我们并不需要额外的参数,所以定义为none
namespace:用于指定命名空间
method:用来指定调用Action的方法名
encode:用于指定是否编码请求参数
includeContext:用于指定是否将当前上下文包含在URL的地址值中。
id:用于指定URL元素的引用ID。
<s:url action="showBook">
<s:param name="name" value="'Book1'"/>
</s:url><br>
<s:url value="http://localhost:8080/Test/ch4/urlTag.jsp">
<s:param name="name" value="'Book2'"/>
</s:url><br>
<s:url includeParams="get">
<s:param name="name" value="%{'Book3'}"/>
</s:url>
两种value赋值写法作用相同
9.date标签
用于按指定格式输出一个日期,还可以计算指定时间到当前的时间的时差。
format:用于指定日期格式化
nice:用于指定是否输出指定时间与当前时间的时差,默认值为false,即不输出时差。
关于将英文配置成中文请参考 【转】< s:date >使用nice 属性 实现 ‘XX分钟前’ 日期显示
name:用于指定要被格式化输出的日期值。
id:用于指定该元素的引用ID。
format和nice属性不能同时指定,同时指定时则format属性失效
<h3>date使用</h3>
<s:bean name="java.util.Date" id="currentDate"></s:bean>
<ul><li>日期格式</li><li>日期</li></ul>
<ul><li>Year/Month/Day</li><li><s:date name="#currentDate" format="yyyy/MM/dd"/></li></ul>
<ul><li>Year/Day/Month</li><li><s:date name="#currentDate" format="yyyy/dd/MM"/></li></ul>
<ul><li>Day/Month/Year</li><li><s:date name="#currentDate" format="dd/MM/yyyy"/></li></ul>
<ul><li>Nice Date</li><li><s:date name="#currentDate" nice="true"/></li></ul>