0

这是一个棘手的问题,我有下一个 jspx:

<form:form modelAttribute="employee" id="employeeUpdateForm" method="post">
    <form:select path="departmentId">           
    <form:options items="${departments}" />
</form:select>

<button type="submit">Save</button>
    <button type="reset">Reset</button>
</form:form>

和我的 updateForm 方法:

@RequestMapping(value = "/{id}", params = "form", method = RequestMethod.GET) 
public String updateForm(@PathVariable ("id") Long id, Model uiModel) { 
uiModel.addAttribute("employee", employeeService.findById(id));

List<Department> departments = employeeService.getAllDepartments();
uiModel.addAttribute("department", departments);

return "staff/update";
}

“部门”有两个字段:departmentId (int) 和 divisionName (String)。

因此,“员工”和“部门”是两个不同的对象,我希望能够使用来自“部门”的字符串表示填充与“员工”(departmentId)相关的字段。他们的部门 ID 相互匹配。一旦选择了某个部门,它的 id 就会放入 employee.departmentId。

提前致谢!

4

1 回答 1

3

我不太确定 updateForm 方法在控制器中的作用。如果那是加载初始表单的那个,那么模型属性名称应该是departments而不是department. 这些是 updateForm 方法的变化。我创建了一个条目集,它采用以 departmentId 作为值、以 DivisionName 作为键的哈希映射。

 Set<Map.Entry<String, String>> departments;
 uiModel.addAttribute("employee", employeeService.findById(id));
 List<Department> departmentsList = employeeService.getAllDepartments();
 final Map<String, String> departmentsMap = new HashMap<String, String>();
 if( departmentsList != null && !departmentsList.isEmpty()){
     for(Department eachDepartment : departmentsList ){
         if(eachDepartment != null){
            departmentsMap.put(eachDepartment.getDivisionName(), eachDepartment.getDepartmentId());
        }
     }
  }
  departments = departmentsMap.entrySet(); 
  uiModel.addAttribute("departments", departments);

现在在jsp中显示这个。

 <form:form modelAttribute="employee" id="employeeUpdateForm" method="post">
  <form:select path="departmentId">         
    <form:options items="${departments}" var="department" itemValue="value" itemLabel="key"/>
  </form:select> 
 <button type="submit">Save</button>
 <button type="reset">Reset</button>
</form:form>

value和对应于控制器中填充的key键值对。departmentsMap该值绑定到部门 ID,并且部门名称将显示在下拉列表中。

我希望这是你想要的。

于 2013-06-12T17:56:53.787 回答