java - 如何在 Struts 2 optgroup 中显示 Map 值的元素(对象列表)?

标签 java jsp struts2 optgroup

编辑:我尝试在另一个问题中问这个问题,因为我觉得最初提出的问题已经得到了充分的回答。我因为这样做而受到惩罚。所以我相应地编辑了这个问题。基本上,我不知道访问每个映射条目“值”中的员工列表属性的正确语法。

<小时/>

我有一个 TreeMap 存储在 session 变量中。 TreeMap 的“键”保存一个字符串。的“值”保存一个对象列表。 TreeMap 填充在 Action 类中。示例 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 中,我想显示一个选择框,其中每个“key”作为 optgroup 标签,“value”的 Employee 对象列表中的每个 employeeId 和 employeeName 分别作为选项值并显示。我尝试了下面的代码,但没有成功:

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

所以选择框应该看起来像这样,当然减去要点:

  • A
    • 无名氏
    • 无名氏
  • B
    • employeeList2 的第 1 个员工姓名
    • employeeList2 的第二个员工姓名
    • employeeList2 的第 x 个员工姓名
  • C
    • employeeList3 的第 1 个员工姓名
    • employeeList3 的第二个员工姓名
    • employeeList3 的第 x 个员工姓名

当我尝试上面的 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 
>

我已验证 map 的填充方式与我的预期完全一致。因此它会使用正确的数据发送到 JSP。

最佳答案

  1. 您将 %{}##{} ( three different things ) 混淆了;
  2. 当你迭代一个集合时,当前对象被压入值栈,所以你不再需要提及集合。不过,您可以使用 var 关键字获取对当前对象的引用;
  3. 您滥用了 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>

关于java - 如何在 Struts 2 optgroup 中显示 Map 值的元素(对象列表)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39605715/

相关文章:

java - 流程图(饼图和垂直图)

java - JSP 2 和 Servlet 2.4 破坏了我的自定义标签

java - struts 形式的多 Action

java - Struts 2 基于注释的应用程序不工作

javascript - 如何通过 JavaScript 隐藏/显示 Tiles 中的 div?

Java 8 如何从两个集合中过滤不同的实体?

java - 使用 Spring 配置文件设置系统属性

java - 这个基本的 Java 对象池有用吗?

jsp - Struts 2 + 禁用表单自动完成

java - 如果有人在我的浏览器中禁用 cookie,我该如何在 java 中进行 session ?