一.通用标签简述
1.通用标签
a)propertyi.参考<s:property>和<s:include>
include标签
<li>include _include1.html 包含静态英文文件</li> <s:include value="/_include1.html"></s:include> <li>include _include2.html 包含静态中文文件</li> <s:include value="/_include2.html"></s:include> <li>include _include1.html 包含静态英文文件,说明%的用法 <s:set name="incPage" value=" '/_include1.html' "/> <s:include value="%{#incPage}"></s:include> </li>
上面代码自己运行体会一下
二.常用标签大例子
下面这个样例几乎涵盖了全部的struts常用标签
struts.xml:
<package name="test" namespace="/javaee" extends="struts-default"> <action name="tags" class="cn.edu.hpu.action.TagsAction"> <result>/tags.jsp</result> </action> </package>
package cn.edu.hpu.action; import com.opensymphony.xwork2.ActionSupport; public class TagsAction extends ActionSupport { private String username; private String password; public TagsAction(){ } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String execute() throws Exception { this.addFieldError("fielderror.test","wrong!"); // TODO Auto-generated method stub return super.execute(); } }
package cn.edu.hpu.mode; public class Dog { private String name; public Dog(){ } public Dog(String name){ super(); this.name=name; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { // TODO Auto-generated method stub return "dog:"+name; } }
<body> 访问各种标签:<br/> 属性访问: <a href="<%=basePath%>javaee/tags.action?username=u&&password=123&age=9&age=31">Tags</a> </body>
<%@ 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 'tags.jsp' starting page</title> </head> <body> <ol> <li>property:<s:property value="username"/></li> <!--s:property中value的值会解析成对象,加单引号说明是一个字符串对象--> <li>property 取值为字符串:<s:property value="'username'"/></li> <!--取到了,就用取到的值,取不到就用默认值default--> <li>property 设定默认值:<s:property value="admin" default="管理员"/></li> <!--escape默认为true,如果为false,就会把双引号里面的当成html语句--> <li>property 设定HTML:<s:property value="'<hr/>'" escape="false"/></li> <hr/> <!--set在换名的时候用得比较多(有些名字比较长的)--> <!--若不设定范围,adminName的值会同时放到request和ActionContext里--> <li>set 设定adminName值(默认为request和ActionContext)-><s:set var="adminName" value="username"/></li> <li>set 从request取值:<s:property value="#request.adminName"/></li> <li>set 从ActionContext取值:<s:property value="#adminName"/></li> <!--scope="page":只在当前页面有效--> <li>set 设定范围 -><s:set name="adminPassword" value="password" scope="page"/></li> <li>set 从相应范围取值:<%=pageContext.getAttribute("adminPassword")%></li> <li>set 设定var,范围为ActionContext -><s:set var="adminPassword" value="password" scope="session"/></li> <!--若指定范围(scope)用#取不到值--> <li>set 使用#取值:<s:property value="#adminPassword"/></li> <!--[Debug]栈值里能看到:session {adminPassword=123}--> <li>set 从相应范围取值:<s:property value="#session.adminPassword"/></li> <hr/> <li>bean 定义bean,并使用param来设定新的属性值: <!--在开始的时候会new这个对象,把它放进栈顶--> <s:bean name="cn.edu.hpu.mode.Dog" var="MyDog"> <!--设置javaBean的初始值--> <s:param name="name" value="'dagou'"></s:param> <!--从值栈中取出name的值--> <s:property value="name"/> </s:bean> <!--s:bean结束后就从栈顶清除了,如果想在访问其中的值, 就把bean设置到var里(var="MyDog"),这个值就会存到ActionContext里面, 在其他地方也可以#出来--> <!--从ActionContext中取出name的值-->| <s:property value="#MyDog.name"/> <!--[Debug]在ActionContext里可以看到MyDog dog:dagou--> </li> <hr/> <li>if elseif else: <!-- parameters(在ActionContext中)装了我们所有传进来的参数 --> age=<s:property value="#parameters.age" /><br/> <!--前面说过的用set简化名字--> <s:set var="age0" value="#parameters.age[0]"/> <s:if test="#age0<0">wrong age!</s:if> <s:elseif test="#age0<20">too young!</s:elseif> <s:else>yeah!</s:else><br/> <s:if test="#parameters.aaa == null">null</s:if> </li> <hr/> <li>遍历集合:<br/> <s:iterator value="{1,2,3}"> <!--s:property会拿出所有元素--> <s:property/> | </s:iterator> </li> <li>自定义变量:<br/> <!--记住,凡是在var里的东西,都放在Context里了--> <s:iterator value="{'aaa','bbb','ccc'}" var="x"> <s:property value="#x.toUpperCase()"/> | </s:iterator> </li> <li>使用status:<br/> <!--status状态,记录着每次循环到现在的状态是什么--> <s:iterator value="{'aaa','bbb','ccc'}" status="status"> <s:property/> | 遍利过的元素总数:<s:property value="#status.count"/> | 遍历过的元素索引:<s:property value="#status.index"/> | 当前是奇数?<s:property value="#status.odd"/> | 当前是偶数?<s:property value="#status.even"/> | 是第一个元素吗?<s:property value="#status.first"/> | 是最后一个元素吗?<s:property value="#status.last"/> <br/> </s:iterator> </li> <hr/> 遍历MAP:<br/> <li> <s:iterator value="#{1:'a',2:'b',3:'c'}"> <s:property value="key"/> | <s:property value="value"/><br/> </s:iterator> </li> <li> <s:iterator value="#{1:'a',2:'b',3:'c'}" var="y"> <s:property value="#y.key"/> | <s:property value="#y.value"/><br/> </s:iterator> </li> <li> </li> <s:debug></s:debug> </ol> </body> </html>
转载请注明出处:http://blog.csdn.net/acmman/article/details/47085811