2 Stimmen

Bindung der Eigenschaften von primitiven Wrapper-Typen mit Spring MVC

Ich habe den Eindruck, dass Spring MVC keine Eigenschaften von primitiven Wrapper-Typen (z. B. Integer, Boolean, etc.) binden kann. Wenn es versucht, solche Eigenschaften zu binden, löst es die folgende Ausnahme aus.

javax.servlet.ServletException: javax.servlet.jsp.JspException: javax.servlet.jsp.JspException: org.springframework.beans.NotReadablePropertyException: Invalid property 'assigned' of bean class [model.domain.Employee]: Bean property 'assigned' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:858)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
    org.apache.jsp.WEB_002dINF.jsp.configuration.form.defaultForm_jsp._jspService(defaultForm_jsp.java:87)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1063)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:801)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.apache.tiles.web.startup.TilesFilter.doFilter(TilesFilter.java:75)

Sobald ich den Typ der Eigenschaft "assigned" (Getter, Setter und Instanzvariable) von "Boolean" in "Boolean" geändert habe, hat es funktioniert.

Kann jemand bestätigen, dass Spring MVC keine Eigenschaften von primitiven Wrapper-Typen binden kann? Wenn ja, gibt es einen Workaround? Ich kann den Eigenschaftstyp nicht in boolean ändern, weil ein Nullwert in dieser Eigenschaft etwas für meine Anwendung bedeutet.

Gracias.

13voto

axtavt Punkte 233070

Spring MVC funktioniert gut mit Boolean .

Dieser Fehler kann auftreten, wenn Ihr Getter für Boolean heißt isAssigned() . Nach JavaBeans-Benennungskonventionen nur boolean kann diese Form des Getter-Namens haben, Boolean haben sollen getAssigned() .

0voto

Stephen C Punkte 665668

Eine Abhilfe wäre die Erstellung/Registrierung eines eigenen Property Editors.

Eine andere Lösung wäre, einen zweiten Setter hinzuzufügen, mit dem Sie die Eigenschaft als "boolesch" festlegen können. (Möglicherweise müssen Sie mit Ihren APIs herumspielen, um die "hilfreiche" Forderung von Spring zu umgehen, dass die Parameter-/Ergebnistypen von Getter und Setter übereinstimmen. Wenn ich so etwas mache, habe ich normalerweise zwei Setter mit unterschiedlichen Namen für dieselbe logische Eigenschaft).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X