使用struts2更新值表单不起作用

时间:2017-06-06 11:04:03

标签: jsp struts2 ognl

我在按 Update 按钮时尝试将值从JSP页面传递给我的Action类。

在这种情况下,我在动作类中创建了一个名为value的字符串列表,其中包含getter和setter。

我的问题是,当尝试修改JSP中的输入字段然后按 Update 时,value在操作类中保持相同(带有其初始值)。

例如:

v[0] = "zero"
v[1] = "something"
v[2] = "true"

在我的表单中,我更改了v[2]中的"false"输入文字,然后按更新;在execute()打印时,v[2]仍为"true"

更新:我使用struts2标签而不是scriptlet

重写了jsp代码
<form name="propertiesForm" method="post" action="<s:url value='/update.action'/>" >
        <table>
              <tr>
            <th>Property</th>
            <th>Value</th>
              </tr>
          <s:iterator value="%{propertiesForm.properties}" status="rowStatus">
         <tr>
        <td><s:property value="%{properties[#rowStatus.index].name}"/></td>
        <td><s:textfield name="value[%{#rowStatus.index}]" value="%{propertiesForm.getValue(#rowStatus.index)}"/></td>
        </tr>

         </s:iterator>
        <tr>
           <td><input class="buttons" type="submit" value="Update" /></td>
        </tr>
   </table> 
</form>

1 个答案:

答案 0 :(得分:0)

表单字段受其name属性的约束。它应该是一个适当的OGNL表达式,由params拦截器对valueStack进行评估。当填充参数时,操作bean应位于top的{​​{1}}上,如果您的操作不是模型驱动的,那么如果操作bean具有相应的属性访问器,则将填充该操作bean。

问题在于您使用scriptlet时的代码(非常不鼓励,请参阅How to avoid Java code in JSP files?)并且代码valueStack中存在错误。

查看您最近在问题中更新的代码

name="<%="value[" + i + "]"%>

我看到该值来自<s:textfield name="value[%{#rowStatus.index}]" value="%{propertiesForm.getValue(#rowStatus.index)}"/> 属性,但表单字段绑定到action属性。提交表单时,可能没有相应的setter来填充属性值。我建议将值绑定到propertiesForm,因此您甚至不需要预先填充propertiesForm,因为value属性评估的值。

name