如何在 Struts2 中的相同 s:select 中显示使用 s:merge 合并的 2 个合并数组列表

How to show 2 merged Arraylists merged using s:merge in same s:select in Struts2

我的 jsp 上有两个数组列表,一个数组列表存储在 servletcontext 中,另一个存储在 Struts2.

中的请求中

现在我使用 s:merge 合并它们,如下所示:

<s:merge id="thirdList">
   <s:param value="#application[@list1]"/>
   <s:param value="#request.list2"/>
</s:merge>

我使用以下代码检查了它们是否合并。

<s:iterator value="thirdList">
   <s:property/>
</s:iterator>

两个数组列表都是 POJO,因此它在 jsp 页面上显示对这些 POJO 的引用。

现在我想将整个列表显示到一个下拉列表中,所以我正在使用它。

<s:select ...... list="thirdList">
</s:select>

所以在 jsp 页面上,下拉列表在下拉列表中显示 POJO。现在我想在下拉列表中显示一些字符串值而不是 POJO 引用。

问题是:list1是object1的class(POJO)的arraylist,list2是object2的class(POJO)的arraylist,希望它们的不同属性显示在落下。

例如list1 中有 5 个 object1 类型的 POJO,list2 中有 10 个 object2 类型的 POJO,我的下拉列表应该包含总共 15 个条目。

为了在 jsp 页面上显示这些属性,我使用了这段代码

<s:iterator value="thirdList">
        <s:property value="id_list1"/>
        <s:property value="description_list1"/>
        <s:property value="id_list2"/>
        <s:property value="description_list2"/>
</s:iterator>

列表已正确打印。现在在s:select标签中,使用的属性是listKey和listValue。

由于我必须使用合并列表在 <s:select> 标签中显示,所以 id_list1id_list2description_list1、[=21 的值应该是多少=] 我必须在 listKeylistValue.

中使用

首先:不要在视图层中做这种工作。你应该写一个对象来保存你需要在[=36中显示的值=],迭代您的两个列表,创建具有所需值的此 view 对象的新实例,并将其放入某个列表。然后在 JSP 中,您可以迭代 view 对象的列表。

话虽这么说……转向骇人听闻的解决方案,而不是最佳实践解决方案。 我将在由 String-s 和 Integer-s 组成的列表中演示它,如果它是 Integer 而不是我们想要调用 intValue() 方法,如果是 String toUpperCase()方法将被调用。因为,默认情况下,调用不存在的 属性 不会产生我们可以比较的值,我们将 ab 使用 #attr 来评估对实例属性的调用。

<s:select list="{'teststring', 2, 'somestring', 3}"
   listValue="#attr['top.intValue()'] == null ? top.toUpperCase() : top.intValue()" />

请注意,如果您的属性中有空值,这将不会工作。

同样不要在视图中这样做

你是对的亚历山大。我不应该在视图层中这样做。但后来我想知道,s:merge 标签有什么用。

为了解决这个问题,我所做的如下:

在操作 class 中,我创建了一个新的 arraylist 。我创建了一个新的 POJO 让我们说 POJO t 有两个成员变量 int 'id' 和 string 'value'.

对于这两个数组列表,我迭代了它们,将它们的 ID 和描述复制到新的 POJO t 中,我需要在 jsp 页面的下拉列表中显示它们并将这个 't' 实例插入新的创建数组列表。然后我将这个数组列表存储到请求对象中。

然后在 jsp 页面的 s:select 标记中,我迭代了这个新列表,对于 listKey 和 listValue,我使用了

listKey="id" and listValue="value"

这很有效。

解决难题的简单方法。