strut2标签s:set和s:if

关于struts2里面s:set 和s:if的问题,  
Java代码   收藏代码
  1. <s:set name="seasonList" value="{'Spring',Summer,'Autumn','Winter'}" />  

这么是正确的,但是我们set一个map,这样就不行了:  
Java代码   收藏代码
  1. <s:set name="monthMap" value='#{"1":"Jan","2":"Feb","3":"Mar","4":"Apr","5":"May",  
  2. "6":"Jun","7":"Jul","8":"Aug","9":"Sep","10":"Oct","11":"Nov","12":"Dec"}' />  

奇怪的是,前面必须要加一个#,感觉很奇怪,我也不知道为什么,希望研究过源码的给一个解答。  
Java代码   收藏代码
  1. <span class="s">  
  2.                         <s:set name="monthMap" value="#{'1':'Jan','2':'Feb','3':'Mar','4':'Apr','5':'May','6':'Jun','7':'Jul','8':'Aug','9':'Sep','10':'Oct','11':'Nov','12':'Dec'}" />  
  3.                         <s:set name="currentMonth" value="%{ chargeMonth }" />  
  4.                         <select name="chargeMonth"  class="styled">  
  5.                             <option value=" ">-- Select Month --</option>  
  6.                             <s:iterator value="#monthMap" id="month">  
  7.                                 <option value="<s:property value='key'/>"  
  8.                                         <s:if test="%{key==#currentMonth}">  
  9.                                             selected="selected"  
  10.                                         </s:if>  
  11.                                         >  
  12.                                     <s:property value='value'/>  
  13.                                 </option>  
  14.                             </s:iterator>  
  15.                         </select>  

发现这样不行,后来经过我反复的测试,当选择10,11,12时候能正确的将selected加上,但是选择前面的数字怎么都不行,后来经我观察,前面我将字符串用的是’,估计在后台反射的时候将其类型错误的转化成char类型了,但是估计当判断length大于1的时候,将其转化成字符串了,所以能够正确。不知道我这么猜的对不对,贴出来分享一下吧,以后希望这样的问题不能在犯了。 
我修改为下面的就可以了:
 
Java代码   收藏代码
  1. <s:set name="monthMap" value='#{"1":"Jan","2":"Feb","3":"Mar","4":"Apr","5":"May","6":"Jun","7":"Jul","8":"Aug","9":"Sep","10":"Oct","11":"Nov","12":"Dec"}' />  
  2.                         <s:set name="currentMonth" value="%{chargeMonth}" />  
  3.                         <select name="chargeMonth"  class="styled">  
  4.                             <option value=" ">-- Select Expiration Month --</option>  
  5.                             <s:iterator value="#monthMap" id="month">  
  6.                                 <option value="<s:property value='key'/>"  
  7.                                         <s:if test="%{key==#currentMonth}">  
  8.                                             selected="selected"  
  9.                                         </s:if>  
  10.                                         >  
  11.                                     <s:property value='value'/>  
  12.                                 </option>  
  13.                             </s:iterator>  
  14.                         </select>  

 set标签

set标签 用于将某个值放入指定范围内。例如application、session范围等。

当某个值所在的对象图深度非常深时,例如如下:person.worker.wife.parent.age,每次访问该值不仅性能地下,而可读性也很差。解决这个问题,可以将改该值设置成一个新值,并放入特定范围内。

set标签属性:

  1. name: 必填,重新生成的新变量的名字
  2. scope: 可选,指定新变量被放置的范围,该属性可以接受application、session、request、page或action 5个值。如果没有指定,默认是放置在Stack Context中。
  3. value: 可选,指定将赋给变量的值。如果没指定,则将ValueStack栈顶的值赋给新变量。
  4. var: 可选,指定该元素的引用ID,如果指定了将会将该值放在ValueStack中!

set标签用于生成一个新变量,并把该变量放置到指定的范围内,这样就允许直接使用JSP表达式语言来访问这些变量,也可以通过struts2标签来访问!

eg:

<!--使用param标签为JavaBean实例传入参数-->

<s:bean name="lee.Person" id="p">

    <s:param name="name" value="'yeeku'"/>

    <s:param name="age" value="29"/>

</s:bean>

将Stack Context中的p值放入默认范围内。<br>

<s:set value="#p" name="xxx"/>

<s:property value="#xxx.name"/> <br>

将Stack Context中的p值放入application范围内<br>

<s:set value="#p" name="xxx" scope="application"/>

<s:property value="#attr.xxx.name"/> <br>

将Stack Context中的p值放入session范围内<br>

<s:set value="#p" name="xxx" scope="session"/>

<!--使用JSP2.0表达式语言直接访问session中的属性-->

${sessionScope.xxx.name}<br>


取出集合中的值赋给<set标签

<s:iterator id="dmsDocumentinfo" value="#request.dmsDocumentinfos">

              //从集合中取值赋给set声明的变量

<s:set name="str" value="#dmsDocumentinfo.documentDesc"></s:set>


//在页面显示set标签的值

<s:property value="#str" />

</s:iterator>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值