Stoppt die Vorratsdatenspeicherung! Jetzt klicken &handeln! Willst du auch an der Aktion teilnehmen? Hier findest du alle relevanten Infos
und Materialien:

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.

VN:F [1.9.3_1094]
Rating: 5.0/5 (1 vote cast)
Facelets: java.lang.IllegalArgumentException: Setter not found for property class, 5.0 out of 5 based on 1 rating