में एकाधिक चयन ठीक है तो मैं थोड़ी देर के लिए स्प्रिंग एमवीसी में कई चयनों को पूरा करने की कोशिश कर रहा हूं और कोई भाग्य नहीं है।स्प्रिंग 3.0 एमवीसी
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
}
इन सभी हाइबरनेट पर मैप किए जाते लेकिन यह है कि एक मुद्दा नहीं होना चाहिए ।
अब मैं जेएसपी में ऐसा करने में सक्षम होना चाहता हूं कि एक कर्मचारी के लिए <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
मैं हम प्रदान की विकल्पों की सूची से कई का चयन है कि एक मॉडल के लिए एक रूप हो सकता है जहां है जैसे कि यह संभव हो जाना चाहिए महसूस: मैं निम्नलिखित अपवाद मिलता है। स्प्रिंग 3.0 एमवीसी में form:select
और form:options
होने का सबसे अच्छा अभ्यास क्या है?
धन्यवाद!
समाधान:
ठीक है तो बस मामले में किसी को भी आश्चर्य क्या समाधान है। उपयोगकर्ता 01001111 ठीक करने के अलावा:
@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;
}
});
}
}
इस JSP और मॉडल के बीच कौशल के सेट को जोड़ने के लिए वसंत की अनुमति देता है:
<form:select multiple="true" path="skills">
<form:options items="${skillOptionList}" itemValue="name" itemLabel="name"/>
<form:select>
हम नियंत्रक करने के लिए एक CustomCollectionEditor
जोड़ने के लिए इस प्रकार की जरूरत है।
<form:select multiple="true" path="skills">
<form:options items="${skillOptionList}" itemValue="name" itemLabel="name"/>
</form:select>
${skillOptionList}
डाल के बजाय skillOptionList
ठीक है तो इस तरह की मदद की। अब मैं अपने जेएसपी में skillOptionList देख सकता हूं लेकिन सेटस्किल को कभी नहीं बुलाया जाता है और जब मैं सहेजता हूं तो मेरे कर्मचारी के साथ कोई कौशल संबद्ध नहीं होता है। कोई विचार? –
मैंने इसे समझ लिया। यदि आप चाहते हैं तो कृपया कस्टम समाधान चयनकर्ता के बारे में अपने समाधान में हिस्सा जोड़ें जैसा कि किसी और को एक ही समस्या होने पर मेरी पोस्ट में नोट किया गया है। धन्यवाद! –