如何在 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_list1
、id_list2
、description_list1
、[=21 的值应该是多少=] 我必须在 listKey
和 listValue
.
中使用
首先:不要在视图层中做这种工作。你应该写一个对象来保存你需要在[=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"
这很有效。
解决难题的简单方法。
我的 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_list1
、id_list2
、description_list1
、[=21 的值应该是多少=] 我必须在 listKey
和 listValue
.
首先:不要在视图层中做这种工作。你应该写一个对象来保存你需要在[=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"
这很有效。
解决难题的简单方法。