struts2:在动作类的列表中添加VO对象-在jsp中迭代列表-在另一个动作类中获取列表对象

发布于 2024-08-08 21:37:23 字数 986 浏览 0 评论 0原文

在我的 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 将其作为列表对象获取到操作类中。它正在运行,但通过添加双方括号来给出列表,例如 -

[[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]

或让我知道其他解决方案(如果可能)。

In my struts 2 application I am iterating list of VO objects in my jsp as follow -

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

Now I want to get this “listOfVoObjects” in my action class when user will click some button say 'freeze' and to do this I defined it in hidden in the same jsp page like -

<s:hidden name = “listOfVoObjects”/> 

and get it in action class as a list object using setter-getter . It running but giving list by adding double square bracket like -

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

That’s why I getting problem to iterate it using iterate() method in my action class.

Please help to remove this double square bracket. Desired output is -

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

or let me know other solution if possible.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

如果没有 2024-08-15 21:37:23

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

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

如果这些东西没有存储在任何地方,那么您将需要构建一个稍后可以解析的字符串。大多数时候,它是一些持久化的实体,您可以将 id 作为字符串表示形式输出,然后告诉 Struts 在需要对象表示形式时使用该 ID 从数据库加载它。有关如何执行此操作的信息,请参阅 Struts 类型转换。

这样你就得到了一个适合你的类的类型转换器。现在收藏了。我不确定只有一个带有集合名称的字段是否有效,然后尝试从集合的 toString 输出中重建它。也许一旦有一个类型转换器,并且您的 String 看起来像 [1,4,5,6] ,它就会看到 setter 是一个集合,然后尝试从每个“字符串表示形式”创建 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 版本,仍然存在一些类型转换影响。如果您可以使用泛型,并且您的目标 setter 是 List setListOfVoObjects(...),那么 Struts 可以确定为每个条目创建哪种类型的 bean。如果没有,则 Struts 文档中描述了集合和映射的类型转换设置。

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

Element_listOfVoObjects=originator.vo.BeforeSavingReq4OriginatorVO

但请检查 struts 文档。

Your list becomes the String "[originator.vo.BeforeSavingReq4OriginatorVO@15fc793, originator.vo.BeforeSavingReq4OriginatorVO@127bd04, originator.vo.BeforeSavingReq4OriginatorVO@83969e]" because your BeforeSaveingReq4Originator does not have a toString method, but that is not really the issue.

The issue is one of type conversion. It does not seem like the list is editable on your view page, but perhaps you can't recreate it when on the GET/POST you are working with and need it passed through the page. Sooo.... the first thing you need is a converter for creating BeforeSavingReq4OriginatorVO objects to and from Strings.

If these things are not stored anywhere then you will need to build a String that you can later parse. Most of the time its some persisted entity and you can output the id as the String representation and then tell Struts to use the ID to load it from the database when it wants the objet representation. See Struts type conversion for how to do this.

So you get a type converter working for your Class. Now the collection. I am not sure it will work to just have a single field with the name of the collection and try to then reconstruct it from the toString output of the Collection. Maybe once there is a type converter and your String looks like [1,4,5,6] it sees the setter is a collection and then tries to create VO objects from each "String representation".

If not then I know you can iterate over your collection and create hidden fields for each value.

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

Now you Struts will know how to create your collection assuming there is a type converter. If there is no type converter then you have to create the entire structure of the object in the HTML form:

<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>

There are still some type conversion implications depending on your version of Java. If you can use Generics and your target setter is List setListOfVoObjects(...) then Struts can figure out what kind of bean to create for each entry. If not, then there is type conversion settings for Collections and maps described in the Struts documentation.

In a file called [actionName]-conversion.properties you specify the bean type with something like:

Element_listOfVoObjects=originator.vo.BeforeSavingReq4OriginatorVO

but check the struts documentation.

烟雨扶苏 2024-08-15 21:37:23

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

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

只需解决参考文献即可开始。

Here is a working example(Netbeans 6.9 project) illustrating how to iterate over an array or list of objects.

Also, how to submit the form such that the list of objects gets re-created on submission.

Simply resolve the references and get going.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文