16.4.2010 Facelets: java.lang.IllegalArgumentException: Setter not found for property class
Vor kurzem hatte ich in einer JSF-Anwendung einen <a href=”…”> gegen einen MyFaces ausgetauscht. Doch beim Ausführen erhielt ich folgende Exception:
Error Rendering View[/.../....xhtml]
java.lang.IllegalArgumentException: Setter not found for property class
at javax.faces.component.UIComponentBase$AttributesMap.
put(UIComponentBase.java:1645)
at javax.faces.component.UIComponentBase$AttributesMap.
put(UIComponentBase.java:1526)
at com.sun.facelets.tag.jsf.ComponentRule$LiteralAttributeMetadata.
applyMetadata(ComponentRule.java:49)
Leider gab es keinerlei Informationen über die Property, für die ein Setter vermisst wird. In diesem Fall war zwar recht klar, dass das einzige geänderte Tag den Fehler verursacht, aber welcher der vielen Parameter?
Solche Fehler können mit dem Eclipse-Debugger recht einfach gefunden werden. Im Menü “Run” / “Add Java Exception Breakpoint” aufrufen und – in diesem Fall - java.lang.IllegalArgumentException eintragen. Wenn nun die Anwendung ausgeführt wird, hält der Debugger genau im fehlerhaften Kontext und über die View “Variablen anzeigen” kann erforscht werden, was genau den Fehler hervorruft.</a>
In den Variablenwerten fand ich dann auch, dass der Getter getClass war, es aber keinen Setter gab. Klar, denn java.lang.Object.setClass macht wenig Sinn. Sofort war auch klar, dass das Attribut gegen styleClass=”…” ausgetauscht werden muss.
Eine ähnliche Exception gibt es außerdem auch bei einer ungültigen id, z.B mit einem Leerzeichen.

