【学习笔记】struts-tag与jstl的异同

今天看马士兵老师的struts2讲struts-tag视频,边看边打代码,于是就想和jstl中的核心标签库的用法做比较。

OgnlAction:

package com.sxt.ognl;
import com.opensymphony.xwork2.ActionSupport;
public class OgnlAction extends ActionSupport{
	private String password;
	private String username;
	public String execute()
	{
		return SUCCESS;
	}
	/*省略getter和setter*/
}


 页面返回到ognl.jsp 

例如:输出<hr/>标签:

<!-- struts标签  -->
<s:property value = "'<hr/>'" escape = "false"/>
<s:property value = "'<hr/>'" escape = "true"/>
<!-- jstl核心标签 -->
<c:out value = "<hr/>" escapeXml = "false"/>
<c:out value = "<hr/>" escapeXml = "true"/>
 由于struts中应用了ognl表达式,所用的String都要用单引号引起来。 

再例如:输出变量username(在通过action访问时用get方式为username赋值):

<!-- struts标签  --> <s:property value = "username"/>
<!-- jstl标签  -->   <c:out value = "${username}"/>
 虽然都可以访问,但username的位置不同。struts访问的username存在于OgnlAction中,而jstl访问的位于request中 

再例如:利用刚刚得到的username为其他几个变量赋值,同时为另外两个变量赋值:"username"

<!-- struts的set -->
    <s:set var = "adminname" value = "username"/>
    <s:set var = "logname" value = "'username'"/>
<!-- c的set -->
    <c:set var = "adminname1" value = "${username }"/>
    <c:set var = "logname1" value = "username"/>
 两者的效果完全相同。 

由于在request中保存了username,所以试着分别用两种方式取值:

<!-- s从request取值 --> <s:property value = "#request.username"/>
<!-- c从request取值 --> <c:out value = "${ requestScope.username}"/>
 

但如果用get传递Action中未定义的变量,比如age=10,那么这种方式貌似取不到 ,无解。

我们现在尝试用struts的set标签设定一个变量,然后用jstl读取,再用jstl修改这个变量的值,用struts读取:

 <s:set var = "adminPwd" value = "password" scope = "page"/>
 <c:out value = "${pageScope.adminPwd }"/>

 <c:set var = "adminPwd" scope = "page" value = "hahaha"/>
 <s:property value = "#attr.adminPwd"/> 
由于范围是page,而在struts中page的读取较为复杂,这里用了另外一种读取方式:#attr


bean 构造(以Dog为例):

package com.sxt.ognl;

public class Dog {
	private String name;
        public Dog(){}
        /*省略getter和setter*/
 }
<!-- struts构造bean -->
<s:bean var = "mylittledog" name = "com.sxt.ognl.Dog">
    	<s:param name = "name" value = "'oudy'"/>
</s:bean>

<!-- jsp构造bean -->
<jsp:useBean id = "myBigDog" scope = "request" class = "com.sxt.ognl.Dog"/>
    <jsp:setProperty name = "myBigDog" property = "name" value = "oudy2"/>



<!-- struts获得dog对象 --><s:property value = "#mylittledog"/>
<!-- jsp获得dog对象 -->   <c:out value = "${requestScope.myBigDog }"/>


<!-- struts获得dog属性 --> <s:property value = "#mylittledog.name"/>
<!-- jstl获得dog属性 -->   <c:out value = "${requestScope.myBigDog.name }"/>
<!-- jsp获得dog属性-->     <jsp:getProperty property = "name" name = "myBigDog"/>
 
 
 
 
 
 需要注意的是,struts的bean装到了Stack Context中,而jsp的bean需要自己指定范围。 



对于遍历集合,两种标签略有不同:

 <s:iterator value = "{'aaa','bbb','ccc'}" var = "x" status = "status">
               当前元素:<s:property/>
               遍历过的元素总数:<s:property value = "#status.count"/>
               遍历过的元素索引:<s:property value = "#status.index"/>
               当前是偶数?:<s:property value = "#status.even"/>
               当前是奇数?:<s:property value = "#status.odd"/>
               第一个元素?:<s:property value = "#status.first"/>
               最后一个元素?<s:property value = "#status.last"/>
 </s:iterator>
<c:forEach items = "aaa,bbb,ccc,ddd" var = "item" varStatus = "status">
   		当前元素:<c:out value = "${item }"/>
   		遍历过的元素总数:<c:out value = "${status.count }"/>
   		遍历过的元素索引:<c:out value = "${status.index }"/>
   		项:<c:out value = "${status.current }"/>
   		当前是奇数?:<c:out value = "${status.count%2==1 }"/>
   		当前是偶数?:<c:out value = "${status.count%2==0 }"/>
   		第一个元素?:<c:out value = "${status.first }"/>
   		最后一个元素?:<c:out value = "${status.last }"/>
 </c:forEach>

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值