0

我的jsp上有两个arraylist,一个arraylist存储在servletcontext中,另一个存储在Struts2的request中。

现在我使用 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 的类(POJO)的arraylist,list2 是object2 的类(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>的值应该是什么,我必须在and中使用它。id_list1id_list2description_list1description_list2listKeylistValue

4

2 回答 2

0

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

话虽这么说...继续前进,而不是最佳实践解决方案。String我将在由-s和-s组成的列表上演示它Integer,如果它是Integer而不是我们想要调用的方法,则将调用intValue()String方法。toUpperCase()因为,默认情况下,调用不存在的属性不会产生我们可以比较的值,我们将抗体用于#attr评估对实例属性的调用。

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

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

再次不要在视图中这样做

于 2015-02-17T11:53:48.940 回答
0

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

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

在动作类中,我创建了一个新的 arraylist 。我创建了一个新的 POJO,可以说 POJO t 有两个成员变量 int 'id' 和 string 'value'。

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

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

listKey="id" and listValue="value"

这奏效了。

一个难题的简单解决方案。

于 2015-02-17T12:19:58.893 回答