Im trying to create just basic form with form:checkboxes, @Valid annotation and bindingResult but it returns error although list is not null.. When Im am reading code sysout prints correct size of list, and correct size of checked boxes..
Exception
org.apache.jasper.JasperException: An exception occurred processing JSP page [/WEB-INF/view/home.jsp] at line [24]
21: <form:options items="${theCountries}"/>
22: </form:select><br><br>
23:
24: Code language: <form:checkboxes path="languages" items="${programmingLanguages}"/><br>
25: Operating System: <form:radiobuttons path="operatingSystems" items="${operatingSystems}"/>
26:
27: <input type="submit" name="go next">
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:584)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:481)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1257)
org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1037)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:980)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Root Cause
java.lang.IllegalArgumentException: 'items' must not be null
org.springframework.util.Assert.notNull(Assert.java:115)
org.springframework.web.servlet.tags.form.AbstractMultiCheckedElementTag.setItems(AbstractMultiCheckedElementTag.java:84)
org.apache.jsp.WEB_002dINF.view.home_jsp._jspx_meth_form_005fcheckboxes_005f0(home_jsp.java:416)
org.apache.jsp.WEB_002dINF.view.home_jsp._jspService(home_jsp.java:206)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:443)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1257)
org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1037)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:980)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
To prove that list is not null: app photo link
Here is code:
ReadFromProperties.class
@Component
public class ReadPropertiesImpl implements ReadProperties {
@Value("#{${student.countrylist}}")
private HashMap<String,String> countries;
@Value("#{'${student.languages}'.split(',')}")
private List<String> languages;
@Value("#{'${student.operatinsystems}'.split(',')}")
private List<String> operatingSystems;
@Override
public HashMap<String, String> readCountries() {
return countries;
}
@Override
public List<String> readLanguages() {
return languages;
}
@Override
public List<String> readOperatingSystems() {
return operatingSystems;
}
}
HomeController.class
@Controller
@RequestMapping("/homeController")
public class HomeController {
@Autowired
ReadProperties readProperties;
@GetMapping(value = "/home")
public String homePage(Model model) {
model.addAttribute("student", new Student());
model.addAttribute("theCountries", readProperties.readCountries());
model.addAttribute("programmingLanguages", readProperties.readLanguages());
model.addAttribute("operatingSystems", readProperties.readOperatingSystems());
return "home";
}
@GetMapping(value = "processForm")
public String processForm(@Valid @ModelAttribute("student") Student student, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
System.out.println("has errors");
return "home";
} else {
System.out.println("no errors");
return "studInfo";
}
}
}
Student.class
@Component
public class Student {
@NotNull(message = "is Required")
@Pattern(regexp = "/^[a-z ,.'-]+$/i")
private String fName;
private String lName;
private String country;
private List<String> languages;
private List<String> operatingSystems;
public Student() {
}
public String getfName() {
return fName;
}
public void setfName(String fName) {
this.fName = fName;
}
public String getlName() {
return lName;
}
public void setlName(String lName) {
this.lName = lName;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public List<String> getLanguages() {
return languages;
}
public void setLanguages(List<String> languages) {
this.languages = languages;
}
public List<String> getOperatingSystems() {
return operatingSystems;
}
public void setOperatingSystems(List<String> operatingSystems) {
this.operatingSystems = operatingSystems;
}
}
home.jsp:
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form:form action="/homeController/processForm" modelAttribute="student" method="get">
Enter First Name: <form:input path="fName"/><br>
<form:errors path="fName"/>
Enter Last Name" <form:input path="lName"/><br>
Country: <form:select path="country"><br>
<form:options items="${theCountries}"/>
</form:select><br><br>
Code language: <form:checkboxes path="languages" items="${programmingLanguages}"/><br> //error here :(
Operating System: <form:radiobuttons path="operatingSystems" items="${operatingSystems}"/><br>
<input type="submit" name="go next">
</form:form>
</body>
</html>
code source https://github.com/carrothead/SpringMvcJavaConfig.git
Aucun commentaire:
Enregistrer un commentaire