Spring 3.0 MVC中的多项选择

好的,所以一段时间以来我一直在尝试在Spring MVC中完成多项选择,但是没有运气。

基本上我有一个技能课:

public class Skill {

private Long id;

private String name;

private String description;

//Getters and Setters

}

拥有多种技能的员工:

public class Employee {

private Long id;

private String firstname;

private String lastname;

private Set<Skill> skills;

//Getters and Setters

}

所有这些都映射到了Hibernate,但这不应该成为问题。

现在,我希望能够在JSP中从<select multiple="true">元素中选择雇员的技能。

我在JSP中尝试过此方法,但没有运气:

<form:select multiple="true" path="skills">

<form:options items="skillOptionList" itemValue="name" itemLabel="name"/>

<form:select>

这是我的控制器:

@Controller

@SessionAttributes

public class EmployeeController {

@Autowired

private EmployeeService service;

@RequestMapping(value="/addEmployee", method = RequestMethod.POST)

public String addSkill(@ModelAttribute("employee") Employee emp, BindingResult result, Map<String, Object> map) {

employeeService.addEmployee(emp);

return "redirect:/indexEmployee.html";

}

@RequestMapping("/indexEmployee")

public String listEmployees(@RequestParam(required=false) Integer id, Map<String, Object> map) {

Employee emp = (id == null ? new Employee() : employeeService.loadById(id));

map.put("employee", emp);

map.put("employeeList", employeeService.listEmployees());

map.put("skillOptionList", skillService.listSkills());

return "emp";

}

}

但这似乎不起作用。我收到以下异常:

SEVERE: Servlet.service() for servlet jsp threw exception

javax.servlet.jsp.JspException: Type [java.lang.String] is not valid for option items

我觉得应该可以在其中提供一个模型表单,该表单可以从提供的选项列表中进行多项选择。什么是有最佳实践form:select,并form:options在Spring

MVC 3.0?

谢谢!

好的,以防万一有人想知道解决方案是什么。除了用户01001111修复:

<form:select multiple="true" path="skills">

<form:options items="${skillOptionList}" itemValue="name" itemLabel="name"/>

<form:select>

我们需要向CustomCollectionEditor控制器添加a ,如下所示:

@Controller

@SessionAttributes

public class EmployeeController {

@Autowired

private EmployeeeService employeeService;

@Autowired

private SkillService skillService;

@InitBinder

protected void initBinder(WebDataBinder binder) {

binder.registerCustomEditor(Set.class, "skills", new CustomCollectionEditor(Set.class)

{

@Override

protected Object convertElement(Object element)

{

Long id = null;

if(element instanceof String && !((String)element).equals("")){

//From the JSP 'element' will be a String

try{

id = Long.parseLong((String) element);

}

catch (NumberFormatException e) {

System.out.println("Element was " + ((String) element));

e.printStackTrace();

}

}

else if(element instanceof Long) {

//From the database 'element' will be a Long

id = (Long) element;

}

return id != null ? employeeService.loadSkillById(id) : null;

}

});

}

}

这使Spring可以在JSP和模型之间添加技能集。

回答:

您需要将items属性视为一个变量,而不仅仅是引用变量名称:

<form:select multiple="true" path="skills">

<form:options items="${skillOptionList}" itemValue="name" itemLabel="name"/>

</form:select>

${skillOptionList}而不是skillOptionList

以上是 Spring 3.0 MVC中的多项选择 的全部内容, 来源链接: utcz.com/qa/407178.html

回到顶部