2013-06-12 4 views
0

Вот сложный вопрос, у меня есть следующий JSPX:Spring MVC. Наполнение выпадающего списка из различных объектов

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

Итак, «сотрудник» и «отдел» - это два разных объекта, я хотел бы иметь возможность заполнять поле, относящееся к «employee» (departmentId), с строковыми представлениями из «отдела». Их departmentId соответствуют друг другу. После выбора определенного отдела его идентификатор отправляется на employee.departmentId.

Заранее благодарен!

+0

Вы сталкиваетесь с некоторыми проблемами? Какая ошибка или проблема? – Usha

+0

Проблема в том, что я не уверен, как это сделать. Это вопрос – orionix

ответ

3

Я не был уверен, что делает метод updateForm в контроллере. Если это та, которая загружает начальную форму, тогда имя атрибута модели должно быть departments вместо department. Это изменения в методе updateForm. Я создал набор записей, который принимает хэш-карту с идентификатором departmentId как value и 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, который заполняется в контроллере. Значение привязано к идентификатору departmentId, а имя разделения будет показано в раскрывающемся списке.

Надеюсь, это то, что вы хотите.

+0

Да, вы помогли мне. Ваше предложение абсолютно и, несомненно, подходит! Это то, что я искал! Спасибо, Уша. : Установить > отделы и окончательную карту departmentMap = new HashMap () - так как departmentId Long. – orionix

Смежные вопросы