一:JSP显示页
除了UI标签,其余的标签总结的比较全了:
1:s:property
<!--<a href="http://127.0.0.1:8080/Struts2Project/tags?username=abc&password=123">http://127.0.0.1:8080/Struts2Project/tags?username=abc&password=123</a><br/>-->
<h2>一.s:property</h2>
<!-- 1.OGNL表达式 -->
1.username:<s:property value="username"/> <br/>
<!-- 2.把值强制转成字符串(不受OGNL限制),对应的强制转成OGNL用 %{} -->
2."'username'":<s:property value="'username'"/><br/>
<!-- 3.虽然context里没有,但是能通过default写入临时的 -->
3.value="admin" default="管理员":<s:property value="admin" default="管理员"/><br/>
<!-- 4.escape如果是TRUE,就会把hr当做字符串打出来。FALSE就会显示“横线” -->
4.value="《hr》" escape="true":<s:property value="'<hr/>'" escape="true"/><br/>
value="《hr》" escape="false":<s:property value="'<hr/>'" escape="false"/><br/>
2:s:set
<h2>二.s:set</h2>
<!-- 1.把username的值,赋给adminName -->
1.var="adminName" value="username":<s:set var="adminName" value="username"/><br/>
<!-- 如果加上单引号'',就是把“username”字串传递过去,不加单引号就相当于%{}-->
var="adminName" value="username":<s:set var="adminName" value="'username'"/><br/>
<!-- 结果 -->
value="#request.adminName":<s:property value="#request.adminName" /><br/>
value="#adminName":<s:property value="#adminName" /><br/>
<!-- 2.把password的值,赋给adminPassword,并且限制范围是:session -->
<!-- 不设置的话默认是action,就是request和application中各放置一个 -->
2.var="adminPassword" value="password" scope="page":<s:set var="adminPassword" value="password" scope="page"/> <br/>
EL%=%取值:<%=pageContext.getAttribute("adminPassword")%><br/>
var="adminPassword" value="password" scope="session":<s:set var="adminPassword" value="password" scope="session"/> <br/>
EL%=%取值:<%=session.getAttribute("adminPassword")%><br/>
<!-- 这#取不到,因为之前放在session中了,指定值栈(属性范围)才能取到 -->
value="#adminPassword":<s:property value="#adminPassword"/><br/>
value="#session.adminPassword":<s:property value="#session.adminPassword"/><br/>
3:s:bean
<h2>三.s:bean</h2>
<!-- 1.往VO中传值,name和age是VO中的属性(仍然有‘’和OGNL的问题) -->
<s:bean name="com.rt.demo.VO.VOUser" var="theUser">
<s:param name="age" value="1"> </s:param>
<s:param name="name" value="'张三'"> </s:param>
</s:bean> <br/>
<!-- 2.取出属性,返回toString() -->
"#theUser":<s:property value="#theUser" />
<br/>
4:s:include
<h2>四.s:include</h2>
<s:set name="incPage" value="'/some.jsp'" />
<s:include value="%{incPage}" /><br/>
我包含的页面包括中文,没有出现传说中的乱码
5:s:fielderror
<h2>五.s:fielderror</h2>
<s:fielderror name="fielderror" /><br/>
6:s:if , s:else
<h2>六.s:if elseif else</h2>
<!-- 1.判断分支 -->
value="#theUser.age":<s:property value="#theUser.age" /><br/>
if-else:<s:if test="#theUser.age>0"> s:if输出>0 </s:if>
<s:else>s:else输出</s:else><br/>
<!-- 2.测试有无(abc可以有多个,所以要 取0号) -->
<s:if test="#parameters.abc[0] == null"> 不存在abc </s:if> <br/>
7:s:iterator
<h2>七.s:iterator</h2>
<!-- 1.测试遍历 -->
1.value="{1,2,3}" :<s:iterator value="{1,2,3}" >
<s:property/> 【分割符】
</s:iterator><br/>
<!-- 2.定义变量-->
2.var="x":<s:iterator value="{'aa','bb','ccc'}" var="x">
<s:property value="#x.toUpperCase()"/>
</s:iterator><br/>
<!-- 3.用status-->
3.status:<s:iterator value="{'aa','bb','ccc'}" var="x" status="s">
遍历过的数目:<s:property value="#s.count"/> ,
当前索引:<s:property value="#s.index"/> ,
当前索引是偶数?:<s:property value="#s.even"/> ,
是奇数?:<s:property value="#s.odd"/> ,
是第一个元素?:<s:property value="#s.first"/> ,
是最后一个?:<s:property value="#s.last"/> ,
<br/>
</s:iterator><br/>
<!-- 4.Map,定义时必须要多一个#井号-->
4.Map:<s:iterator value="#{1:'aa',2:'bb',3:'ccc'}" var="x">
<s:property value="#x.key"/> 【分割】 <s:property value="#x.value"/> <br/>
</s:iterator><br/>
8:s:debug
<s:debug/>
注意:
用var的话,就放在context里了,其他地方也能访问得到
value=中要“‘名称’”,强制指定成字符串
$#%区别
$用于struts.xml的动态分配
#用于取得valueStack
%{}把string强转成OGNL
二:actin,和VO
action中只有username和password俩属性,配上setter&getter
VO中也是只有 name和age俩属性
本文详细解析了Struts2项目中常用的标签,包括s:property、s:set、s:bean、s:include、s:fielderror、s:if、s:iterator等,并对每个标签的功能和使用进行了深入探讨。
3026

被折叠的 条评论
为什么被折叠?



