在我的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]
或者如果可能的话让我知道其他解决方案。
答案 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)