我在按 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>
答案 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