假设我想根据用if-tag表示的条件在Struts 2中的url-tag中添加一个参数。
什么不起作用是因为param被添加到容器中,在这种情况下是if-tag。
<s:url id="url" value="path/to/something">
<s:if test="%{#expression}">
<s:param name="param" value="value" />
</s:if>
</s:url>
是否有替代下面的代码,即使未设置param也能很好地工作?
<s:if test="%{#expression}">
<s:set name="param" value="value"/>
</s:if>
<s:else>
<s:set name="param" value=""/>
</s:else>
<s:url id="url" value="path/to/something">
<s:param name="param" value="%{#param}" />
</s:url>
该片段将被多次包含在内。这就是为什么param
显式设置为空(如果表达式的计算结果为false),则将其转换为空。
答案 0 :(得分:0)
您不应该对if
代码进行参数化,而是可以将url
标记包裹在if/else
个代码
<s:if test="%{#expression}">
<s:url var="url" value="path/to/something">
<s:param name="param" value="value" />
</s:url>
</s:if>
<s:else>
<s:url var="url" value="path/to/something">
<s:set name="param" value=""/>
</s:url>
</s:else>