Touch down....

Creative Commons License photo credit: law_keven

“Setter not found for property class” is one of the most frustrating errors you can get in a Seam / facelets project.

It usually appears late, and you spend a long time trying to solve it. The solution is so simple you have to bang your hand when you finally find it.

I write this in the hope that it shows first in Google searches for this error…

The stack trace

The stack trace is not very useful:

java.lang.IllegalArgumentException: Setter not found for property class
at javax.faces.component.UIComponentBase$AttributesMap.put(UIComponentBase.java:1594)
at javax.faces.component.UIComponentBase$AttributesMap.put(UIComponentBase.java:1499)
at com.sun.facelets.tag.jsf.ComponentRule$LiteralAttributeMetadata.applyMetadata(ComponentRule.java:49)
at com.sun.facelets.tag.MetadataImpl.applyMetadata(MetadataImpl.java:36)
at com.sun.facelets.tag.MetaTagHandler.setAttributes(MetaTagHandler.java:62)
at com.sun.facelets.tag.jsf.ComponentHandler.apply(ComponentHandler.java:144)
at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
at com.sun.facelets.tag.ui.DefineHandler.applyDefinition(DefineHandler.java:64)
at com.sun.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:131)
at com.sun.facelets.impl.DefaultFaceletContext$TemplateManager.apply(DefaultFaceletContext.java:337)
at com.sun.facelets.impl.DefaultFaceletContext.includeDefinition(DefaultFaceletContext.java:307)
at com.sun.facelets.tag.ui.InsertHandler.apply(InsertHandler.java:68)
at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
at com.sun.facelets.tag.jsf.ComponentHandler.applyNextHandler(ComponentHandler.java:314)
at com.sun.facelets.tag.jsf.ComponentHandler.apply(ComponentHandler.java:169)
at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
at com.sun.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:49)
at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
at com.sun.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:25)
at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:248)
at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:294)
at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:273)
at com.sun.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:140)
at com.sun.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:113)
at com.sun.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:49)
at com.sun.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:25)
at com.sun.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:95)
at com.sun.facelets.FaceletViewHandler.buildView(FaceletViewHandler.java:524)
at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:567)
at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)

The issue is actually quite simple – you used a class attribute on a non-html element. I always get it when I translate our designer’s pages to JSF:

...

See the problem? the <s:div> element actually requires a styleClass attribute, not a class.

...

Popularity: 16% [?]

Tagged with:
 

11 Responses to Facelets: Setter not found for property class

  1. Albertoimpl says:

    Thanks! With tags are allowed?
    I have a div with and with one should I use, and how?
    Thanks you!

  2. Duck Ranger says:

    @Albertoimpl – Do you mean which UI tags are allowed? This depends on what tag libraries you are using.

  3. gunhed says:

    Thank you so much !! You made me win some precious time !! Indeed the exception ‘s cause is not so easy to figure out because with “class” in its label we thing about a Java class and are not focused on the html tag class attribute ‘class=”" !

    Bye,
    Gunhed french guy

  4. Peter says:

    Thanks a lot! You have saved my time!!!! :-)

    cheers

  5. Duck Ranger says:

    @gunhed, @Peter – happy to help ;)

  6. Kevin says:

    Thank you. :)

  7. Bruno says:

    Thank you! :)

  8. Chistiano says:

    It solve my problem. Thank you!

  9. tharun says:

    Thanks

  10. Marcio K says:

    Nailed it, saved me a lot of time. Thanks. :)

  11. Medovarszki says:

    This post saved my hair from falling out but yeah, I beat my head against the wall now too :)

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>