首先,我们都知道,在struts2中有一个valuestack。里面存放的就是action里的属性。同时,还有一个stackcontext,里面放的是map形式的request/session/attr/application。
在取值的时候
valuestack中的值
<s:property value="user.name">
或在任意的<s:/>标签内使用%{} (记得这个 在s标签内部 就得使用%{} )
stackcontext中的值
<s:property value="。attr.user.name"> (此时在request/session/attr/application中应该有一个user)
使用attr是在你自己也不知道user这个数据是放在request/session还是别的什么里。
再说说struts里的if
官方给出的指导里面 例子很简单
<s:if test="%{false}">
<div>Will Not Be Executed</div>
</s:if>
<s:elseif test="%{true}">
<div>Will Be Executed</div>
</s:elseif>
<s:else>
<div>Will Not Be Executed</div>
</s:else>
屏幕上会打印出Will Be Executed
这说明什么,这说明%{}取得值,不一定在valuestack中。
既然说到了strtus的if,我们不妨再看看jstl里面的if
再说jstl的if之前我们先看看EL运算符
![技术分享](http://img.blog.csdn.net/20150316231003739?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGxmMTIzMzIx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
jstl的if如下:
![技术分享](http://img.blog.csdn.net/20150316231216260?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGxmMTIzMzIx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
下来我们也看看我今天在用if遇到的问题
list是valuestack里面的对象
我想完成的功能是如果 list.getIndex(2).getContent()的内容是入网优先
就让下拉框默认选中入网优先
<s:if test="%{list.{content}[2]==入网优先}">
<option value="入网优先" selected="selected">入网优先</option>
</s:if>
<s:else>
<option value="入网优先">入网优先</option>
</s:else>
上面的代码肯定不能执行喽。为什么?
大家请参考 struts2 if标签示例
换句话说 我的代码应该改成下面的样子
<s:if test="%{list.{content}[2]==\"上网优先\"}">
<option value="上网优先" selected="selected">上网优先</option>
</s:if>
<s:else>
<option value="上网优先">上网优先</option>
</s:else>
参考资料
精通javaweb整合开发
http://blog.csdn.net/liehuoliaoyuan/article/details/7426085
http://blog.csdn.net/dlf123321/article/details/28645369
http://hw1287789687.iteye.com/blog/1949722
Struts的取值与标签
原文:http://blog.csdn.net/dlf123321/article/details/44317493