struts2 <s:iterator> <s:param> not working </s:param> </s:iterator>

时间:2012-08-22 05:53:40

标签: struts2

我正在使用tag显示列表值。同时我想为显示值提供超链接以提供显示值的操作。我正在使用<s:param>。但值不是传递。我写的如下

<s:iterator status="stat" value="transactionList">
        <s:url id="open" action="openTransaction">
              <s:param name="transactionCode" value="<s:property value='monthName'/>"/>
         </s:url>
 <tr class="gradeB">
  <td>
    <s:a href="%{open}"><s:property value='transactionCode'/></s:a>
  </td>
  <td><s:property value="monthName"/></td>
  <td><s:property value="transactionDesc"/></td>

  </tr>
  </s:iterator>

现在transactionCode属性显示超链接,点击该操作转发到openTransaction方法。但是我传递给<s:param>的值不是,它给出了空值。在针对该特定事务代码的迭代中,我想仅传递该特定事务代码。在struts 1.x中我为此使用了显示标签表装饰器,它接受当前行对象。我也想将当前行值传递给动作。请帮帮我。

2 个答案:

答案 0 :(得分:3)

如果你想使用<s:property>标记将一个参数放在一个网址中,你必须这样做:

<s:url ...>
    <s:param name="foo"><s:property value="bar"/></s:param>
</s:url>

<s:param>的{​​{3}}解释了使用这种放置参数的方式和你的方式之间的区别。

  

注意:声明param标记时,可以在值属性中定义值,也可以在开始和结束标记之间定义文本。根据这两种情况,Struts的行为有点不同。使用示例最好地说明了这一点:

<param name="color">blue</param> <-- (A) --> 
<param name="color" value="blue"/> <-- (B) --> 
  

在第一种情况(A)中,值将作为java.lang.String对象计算到堆栈。在情况(B)中,值将作为java.lang.Object对象计算到堆栈。   有关更多信息,请参阅WW-808。

修改:另请注意,如果您使用的是2.1.x或更高版本,则id <s:url>属性已弃用,并已替换为var }。你可以阅读它documentation

答案 1 :(得分:0)

<c:url var="search" value="/image/search.action">
<c:forEach items="${filtersMap}" var="map">
<c:param name="filtersMap.${map.key}" value="${map.value}"/>
</c:forEach>

$ {filtersMap}是来自行动的地图参数