Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsp Struts2-如何更新表单中的集合_Jsp_Struts2 - Fatal编程技术网

Jsp Struts2-如何更新表单中的集合

Jsp Struts2-如何更新表单中的集合,jsp,struts2,Jsp,Struts2,我研究这个已经有一段时间了。我读过 它非常接近我所需要的,但我仍然不能完全解决我的问题 我有一个java.util.Set对象。类是“事件”,集合的名称是“事件”。我想在JSP中提供一个表单,允许用户修改事件对象的属性,但我想一次更新多个。以下是我的JSP代码片段: <s:form theme="simple"> <table> <s:iterator value="events" var="ev"> <tr> &l

我研究这个已经有一段时间了。我读过 它非常接近我所需要的,但我仍然不能完全解决我的问题

我有一个java.util.Set对象。类是“事件”,集合的名称是“事件”。我想在JSP中提供一个表单,允许用户修改事件对象的属性,但我想一次更新多个。以下是我的JSP代码片段:

<s:form theme="simple">
  <table>
    <s:iterator value="events" var="ev">
    <tr>
      <td> <s:textfield name="?????" value="%{#ev.price}" </td>
      <td> <s:textfield name="?????" value="%{#ev.amount}" </td>
     </tr>
     </s:iterator>
     <tr><td colspan="2">
       <s:submit value="Apply" action="EditEventsAction_save" ></s:submit>
     </td></tr>
  </table>
</s:form>
TestAction转换.属性

Key_assetMap=java.lang.Integer
Element_assetMap=AssetId
CreateIfNull_assetMap=false

有许多问题;您应该在日志文件中看到堆栈跟踪

最重要的是:您没有检查呈现的HTML。如果有,您会看到
key
按原样渲染–未评估。我的错(注释不完整),尽管文档显示了OGNL转义

<s:textfield name="assetMap[%{key}].clientId" />
始终检查呈现的HTML

最终,静态映射将成为一个问题。它应该是一个实例属性(或者,我想是一个
ThreadLocal
,但在我看来,您很难证明这一点)

此时不需要类型转换文件;这在很大程度上是一个遗留工件。您应该看到一个异常,即无法找到
AssetId

如果我在submit方法中记录资产映射,这些事情处理完毕后,我会看到:

{1=foo.AssetId@502c06b2, 2=foo.AssetId@7a6bb93c, 3=foo.AssetId@364e50ee}

使用映射或集合,这样就有一个键或索引来指示值引用的对象。我也尝试了HashMap。我不清楚如何使用表单中的键来引用正确的对象。我现在有了一个新版本(使用HashMap),它为每个textfield使用唯一的变量名,并有一个隐藏字段保存HashMap键。在action类中,每一个都可以作为字符串[]访问。这会起作用,但看起来很笨重。有更干净的解决方案吗?是的。使用mapName[键]作为表单字段名。请看类型转换文档,其中谈到了集合。非常好,感谢您提供的解决方案和解释。调试这仍然是一项挑战。@ben_979总是如此;)问题的一部分在于,一些S2文档仍然是遗留的,应该更新,特别是类型转换位——我已经把它放在了要做的事情列表中。谢谢你提出来。
Key_assetMap=java.lang.Integer
Element_assetMap=AssetId
CreateIfNull_assetMap=false
<s:textfield name="assetMap[%{key}].clientId" />
<input type="text" name="assetMap[1].clientId" value="foo" id="map_save_assetMap_1__clientId"/>
{1=foo.AssetId@502c06b2, 2=foo.AssetId@7a6bb93c, 3=foo.AssetId@364e50ee}