如何在 Struts 2 选项组中显示地图值(对象列表)的元素?
How do I show elements of a Map's value (List of Objects) in a Struts 2 optgroup?
已编辑:我尝试在另一个问题中提出这个问题,因为我觉得最初提出的问题已得到充分回答。我因为那样做而受到责备。所以我相应地编辑了这个问题。基本上,我不知道访问每个 Map 条目的 "value" 中的员工列表属性的正确语法。
我在会话变量中存储了一个 TreeMap。 TreeMap 的 "key" 包含一个字符串。 "value" 的包含一个对象列表。 TreeMap 填充在 Action class 中。示例 TreeMap 可能如下所示:
ArrayList<Employee> employeeList1 = new ArrayList<Employee>();
Employee myEmployee = new Employee();
myEmployee.setEmployeeId("123");
myEmployee.setEmployeeName("John Doe");
employeeList1.add(myEmployee);
myEmployee = new Employee();
myEmployee.setEmployeeId("456");
myEmployee.setEmployeeName("Jane Doe");
employeeList1.add(myEmployee);
...
TreeMap<String,Employee> availableSupervisorsMap = new TreeMap<String,Employee>();
availableSupervisorsMap.put("A", employeeList1);
availableSupervisorsMap.put("B", employeeList2);
availableSupervisorsMap.put("C", employeeList3);
session.setAttribute("availableSupervisorsMap", availableSupervisorsMap);
在 JSP 中,我想显示一个 select 框,其中每个 "key" 作为 optgroup 标签,每个 employeeId 和 employeeName 在 "value" 中Employee 对象列表分别作为选项值和显示。我尝试了下面的代码,但无济于事:
<s:select name="availableIds" list="%{#session.availableSupervisorsMap}" multiple="true">
<s:optgroup label="%{key}">
<s:iterator value="%{value}">
<option value="<s:property value="employeeId"/>">
<s:property value="employeeName"/>
</option>
</s:iterator>
</s:optgroup>
</s:select>
所以 select 框应该看起来像这样,当然要减去要点:
- 一个
- 李四
- 李四
- B
- 员工列表 2 的第一个员工姓名
- employeeList2 的第二个 employeeName
- employeeList2 的第 x 个 employeeName
- C
- 员工列表 3 的第一个员工姓名
- employeeList3 的第二个 employeeName
- employeeList3 的第 x 个 employeeName
当我尝试上面的 JSP 代码时,生成了以下 HTML:
<select name="availableIds" id="AssignmentSupervisors_availableIds" multiple="multiple">
<option value="A">[Employee:
=========================================================
employeeName = John Doe
employeeId = 123
=========================================================
, Employee:
=========================================================
employeeName = Jane Doe
employeeId = 456
]</option>
<optgroup
>
我已确认地图的填充完全符合我的预期。所以它使用正确的数据进入 JSP。
- 您混淆了
%{}
与 #
和 #{}
(three different things);
- 当你迭代一个集合时,当前对象被压入值栈,所以你不需要再提及集合。但是,您可以使用
var
关键字获取对当前对象的引用;
- 您误用了 IteratorStatus。
正确的代码比你想象的要简单:
<s:select name="availableIds" list="%{#session.availableSupervisorsMap}" multiple="true">
<s:optgroup label="key">
<s:iterator value="value" var="currentRow">
<option value="%{#currentRow.employeeId}">
<s:property value="%{#currentRow.employeeName}"/>
</option>
</s:iterator>
</s:optgroup>
</s:select>
已编辑:我尝试在另一个问题中提出这个问题,因为我觉得最初提出的问题已得到充分回答。我因为那样做而受到责备。所以我相应地编辑了这个问题。基本上,我不知道访问每个 Map 条目的 "value" 中的员工列表属性的正确语法。
我在会话变量中存储了一个 TreeMap。 TreeMap 的 "key" 包含一个字符串。 "value" 的包含一个对象列表。 TreeMap 填充在 Action class 中。示例 TreeMap 可能如下所示:
ArrayList<Employee> employeeList1 = new ArrayList<Employee>();
Employee myEmployee = new Employee();
myEmployee.setEmployeeId("123");
myEmployee.setEmployeeName("John Doe");
employeeList1.add(myEmployee);
myEmployee = new Employee();
myEmployee.setEmployeeId("456");
myEmployee.setEmployeeName("Jane Doe");
employeeList1.add(myEmployee);
...
TreeMap<String,Employee> availableSupervisorsMap = new TreeMap<String,Employee>();
availableSupervisorsMap.put("A", employeeList1);
availableSupervisorsMap.put("B", employeeList2);
availableSupervisorsMap.put("C", employeeList3);
session.setAttribute("availableSupervisorsMap", availableSupervisorsMap);
在 JSP 中,我想显示一个 select 框,其中每个 "key" 作为 optgroup 标签,每个 employeeId 和 employeeName 在 "value" 中Employee 对象列表分别作为选项值和显示。我尝试了下面的代码,但无济于事:
<s:select name="availableIds" list="%{#session.availableSupervisorsMap}" multiple="true">
<s:optgroup label="%{key}">
<s:iterator value="%{value}">
<option value="<s:property value="employeeId"/>">
<s:property value="employeeName"/>
</option>
</s:iterator>
</s:optgroup>
</s:select>
所以 select 框应该看起来像这样,当然要减去要点:
- 一个
- 李四
- 李四
- 李四
- B
- 员工列表 2 的第一个员工姓名
- employeeList2 的第二个 employeeName
- employeeList2 的第 x 个 employeeName
- 员工列表 2 的第一个员工姓名
- C
- 员工列表 3 的第一个员工姓名
- employeeList3 的第二个 employeeName
- employeeList3 的第 x 个 employeeName
- 员工列表 3 的第一个员工姓名
当我尝试上面的 JSP 代码时,生成了以下 HTML:
<select name="availableIds" id="AssignmentSupervisors_availableIds" multiple="multiple">
<option value="A">[Employee:
=========================================================
employeeName = John Doe
employeeId = 123
=========================================================
, Employee:
=========================================================
employeeName = Jane Doe
employeeId = 456
]</option>
<optgroup
>
我已确认地图的填充完全符合我的预期。所以它使用正确的数据进入 JSP。
- 您混淆了
%{}
与#
和#{}
(three different things); - 当你迭代一个集合时,当前对象被压入值栈,所以你不需要再提及集合。但是,您可以使用
var
关键字获取对当前对象的引用; - 您误用了 IteratorStatus。
正确的代码比你想象的要简单:
<s:select name="availableIds" list="%{#session.availableSupervisorsMap}" multiple="true">
<s:optgroup label="key">
<s:iterator value="value" var="currentRow">
<option value="%{#currentRow.employeeId}">
<s:property value="%{#currentRow.employeeName}"/>
</option>
</s:iterator>
</s:optgroup>
</s:select>