首先,我们都知道,在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运算符

Struts的取值与标签_标签

jstl的if如下:

Struts的取值与标签_标签_02



下来我们也看看我今天在用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>

##################################################################################################

这两天又看了一下这篇文章,觉得用list来放置数据不合适,

<s:if test="%{list.{content}[2]==\"上网优先\"}">
如果list的第二个元素放的是别的信息呢?
所以用map比较合适
<pre name="code" class="html"> <s:if test="%{resultMap.Fre_policy.content==\"上网优先\"}">
<option value="上网优先" selected="selected">上网优先</option>
</s:if>
<s:else>
<option value="上网优先">上网优先</option>
</s:else>

resultMap是hashmap型的,里面的key包括Fre_policy,而Fre_policy里面有个字段是content








参考资料

精通javaweb整合开发

​http://hamlzf.iteye.com/blog/1669490​




​http://hw1287789687.iteye.com/blog/1949722​