struts2:在其他动作类的jsp-getting列表对象的动作类迭代列表中的列表中添加VO对象

时间:2009-10-23 11:12:34

标签: struts2

在我的struts 2应用程序中,我在我的jsp中迭代VO对象列表,如下所示 -

<s:iterator value="listOfVoObjects">
<tr>
<td><s:property value="itemId" /></td>
<td><s:property value="itemName" /></td>
</tr>
</s:iterator>

现在我想在我的动作类中得到这个“listOfVoObjects”,当用户点击某个按钮说“冻结”并执行此操作时我将其隐藏在同一个jsp页面中,如 -

<s:hidden name = “listOfVoObjects”/> 

使用setter-getter将其作为列表对象在action类中获取。它运行,但通过添加双方括号,如 -

给出列表
  

[[originator.vo.BeforeSavingReq4OriginatorVO @ 15fc793,originator.vo.BeforeSavingReq4OriginatorVO @ 127bd04,originator.vo.BeforeSavingReq4OriginatorVO@83969e]]

这就是我在动作类中使用iterate()方法迭代它的原因。

请帮助移除此双方括号。期望的输出是 -

  

[originator.vo.BeforeSavingReq4OriginatorVO @ 15fc793,originator.vo.BeforeSavingReq4OriginatorVO @ 127bd04,originator.vo.BeforeSavingReq4OriginatorVO@83969e]

或者如果可能的话让我知道其他解决方案。

2 个答案:

答案 0 :(得分:0)

您的列表变为字符串“[originator.vo.BeforeSavingReq4OriginatorVO @ 15fc793,originator.vo.BeforeSavingReq4OriginatorVO @ 127bd04,originator.vo.BeforeSavingReq4OriginatorVO@83969e]”因为您的BeforeSaveingReq4Originator没有toString方法,但这不是问题。

问题是类型转换之一。看起来这个列表在您的视图页面上是不可编辑的,但是在您正在使用的GET / POST上并且需要它通过页面时,您可能无法重新创建它。 Sooo ....你需要的第一件事是用于在字符串之间创建BeforeSavingReq4OriginatorVO对象的转换器。

如果这些东西没有存储在任何地方,那么你需要构建一个可以在以后解析的String。大多数情况下它是一些持久化实体,您可以输出id作为String表示,然后告诉Struts在需要objet表示时使用ID从数据库加载它。有关如何执行此操作,请参阅Struts类型转换。

所以你得到一个为你的班级工作的类型转换器。现在收藏。我不确定只有一个带有集合名称的字段,然后尝试从Collection的toString输出重构它。也许一旦有类型转换器,你的String看起来像[1,4,5,6],它就会看到setter是一个集合,然后尝试从每个“String表示”创建VO对象。

如果没有,那么我知道您可以迭代您的收藏并为每个值创建隐藏字段。

<s:iterator value="listOfValues" status="row">
    <s:hidden name="listOfVoObjects[${row.index}]" value="<s:property/>"
</s:iterator>

现在,假设存在类型转换器,Struts将知道如何创建集合。如果没有类型转换器,则必须在HTML表单中创建对象的整个结构:

<s:iterator value="listOfValues" status="row">
    <s:hidden name="listOfVoObjects[${row.index}].itemId" value="<s:property value="itemId"/>"
    <s:hidden name="listOfVoObjects[${row.index}].itemName" value="<s:property value="itemName"/>"
enter code here
</s:iterator>

根据您的Java版本,仍有一些类型转换含义。如果你可以使用Generics,你的目标setter是List setListOfVoObjects(...),那么Struts可以找出为每个条目创建的bean类型。如果没有,那么Struts文档中描述的集合和映射的类型转换设置。

在名为[actionName] -conversion.properties的文件中,您可以使用以下内容指定bean类型:

Element_listOfVoObjects=originator.vo.BeforeSavingReq4OriginatorVO

但请查看struts文档。

答案 1 :(得分:0)

Here是一个工作示例(Netbeans 6.9项目),说明如何迭代数组或对象列表。

此外,如何提交表单,以便在提交时重新创建对象列表。

只需解析引用并开始使用。