5 Replies Latest reply on May 27, 2008 9:10 AM by vdweij

    action for s:link is tried to be resolved as property

    vdweij

      I'm porting an old seam project (1.2.1) to the latest version (2.0.2) and I'm getting an unexpected exception when trying to render an s:link tag.


      This is the tag in my simplified facelet:



      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml"
           xmlns:ui="http://java.sun.com/jsf/facelets"
           xmlns:h="http://java.sun.com/jsf/html"
           xmlns:f="http://java.sun.com/jsf/core"
           xmlns:c="http://java.sun.com/jstl/core"
           xmlns:a4j="https://ajax4jsf.dev.java.net/ajax"
           xmlns:s="http://jboss.com/products/seam/taglib"
           xmlns:fn="http://java.sun.com/jsp/jstl/functions">
      
        <head>
        <title>Test</title>
        </head>
        <body id="body">
          <s:link value="Logout" action="#{identity.logout}"/>
        </body>
      </html>



      I would expect that a link will be created that will call the logout method on a bean registered with the name identity. However when the pages gets rendered the following stacktrace is written to sterr:



      14:25:41,407 ERROR [STDERR] May 22, 2008 2:25:41 PM com.sun.facelets.FaceletViewHandler handleRenderException
      SEVERE: Error Rendering View[/test.xhtml]
      javax.el.ELException: /test.xhtml: Property 'logout' not found on type org.jboss.seam.security.Identity
              at com.sun.facelets.compiler.AttributeInstruction.write(AttributeInstruction.java:53)
              at com.sun.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:39)
              at com.sun.facelets.compiler.UILeaf.encodeAll(UILeaf.java:149)
              at javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
              at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592)
              at org.ajax4jsf.framework.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
              at org.ajax4jsf.framework.ajax.AjaxViewHandler.renderView(AjaxViewHandler.java:233)
              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)
              at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
              at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
              at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:58)
              at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
              at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:85)
              at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
              at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
              at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
              at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
              at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
              at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
              at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
              at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
              at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
              at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
              at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
              at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
              at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
              at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
              at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
              at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
              at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241)
              at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
              at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:580)
              at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
              at java.lang.Thread.run(Thread.java:595)
      


      The correct bean is resolved (org.jboss.seam.security.Identity), but instead of a method I read that a property cannot be found with the name logout. This is true of course, but I was expecting a link to a method, not to a property.


      This is actually my first real Seam project, so if it's due to a really basic issue I apologise in advance ;)


      Jboss 4.2.1.GA
      Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_15-b04, mixed mode)


      Any help is appreciated!


      Regards,
      Aede



        • 1. Re: action for s:link is tried to be resolved as property

          Try to add form tags.


          <h:form>
              <s:link value="Logout" action="#{identity.logout}"/>
          </h:form>
          
          


          • 2. Re: action for s:link is tried to be resolved as property
            vdweij

            Thank you for you response! Unfortunately I get the same stackstrace.Putting it in a form tag does not appear to be the answer.

            • 3. Re: action for s:link is tried to be resolved as property
              vdweij

              I think I'm on to something. After comparing the old (working) version to the new build I discovered to be missing the jboss-seam-ui.jar (the one with the org.jboss.seam.ui.component.html.* classes).


              When I over come another emerged problem I'll try it out, and report back with the result.

              • 4. Re: action for s:link is tried to be resolved as property
                vdweij

                The javax.el.ELException exception is gone. Instead a new one appears in my logs:


                java.lang.NoClassDefFoundError: com/sun/facelets/tag/jsf/ComponentHandler
                        at java.lang.ClassLoader.defineClass1(Native Method)
                        at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
                        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
                        at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
                        at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
                        at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
                        at java.security.AccessController.doPrivileged(Native Method)
                        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
                        at org.jboss.mx.loading.RepositoryClassLoader.findClassLocally(RepositoryClassLoader.java:675)
                        at org.jboss.mx.loading.RepositoryClassLoader.findClass(RepositoryClassLoader.java:655)
                        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
                        at org.jboss.mx.loading.RepositoryClassLoader.loadClassLocally(RepositoryClassLoader.java:193)
                        at org.jboss.mx.loading.ClassLoadingTask$ThreadTask.run(ClassLoadingTask.java:131)
                        at org.jboss.mx.loading.LoadMgr3.nextTask(LoadMgr3.java:399)
                        at org.jboss.mx.loading.RepositoryClassLoader.loadClassImpl(RepositoryClassLoader.java:520)
                        at org.jboss.mx.loading.RepositoryClassLoader.loadClass(RepositoryClassLoader.java:408)
                        at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
                        at java.net.FactoryURLClassLoader.loadClass(URLClassLoader.java:579)
                        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
                        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1345)
                        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
                        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
                        at java.lang.Class.forName0(Native Method)
                        at java.lang.Class.forName(Class.java:242)
                        at com.sun.facelets.util.ReflectionUtil.forName(ReflectionUtil.java:36)
                        at com.sun.facelets.compiler.TagLibraryConfig$LibraryHandler.createClass(TagLibraryConfig.java:291)
                        at com.sun.facelets.compiler.TagLibraryConfig$LibraryHandler.endElement(TagLibraryConfig.java:210)
                        at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
                        at org.apache.xerces.impl.dtd.XMLDTDValidator.endNamespaceScope(Unknown Source)
                        at org.apache.xerces.impl.dtd.XMLDTDValidator.handleEndElement(Unknown Source)
                        at org.apache.xerces.impl.dtd.XMLDTDValidator.endElement(Unknown Source)
                        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
                        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
                        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
                        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
                        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
                        at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
                        at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
                        at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
                        at javax.xml.parsers.SAXParser.parse(SAXParser.java:375)
                        at javax.xml.parsers.SAXParser.parse(SAXParser.java:176)
                        at com.sun.facelets.compiler.TagLibraryConfig.create(TagLibraryConfig.java:407)
                        at com.sun.facelets.compiler.TagLibraryConfig.loadImplicit(TagLibraryConfig.java:431)
                        at com.sun.facelets.compiler.Compiler.initialize(Compiler.java:87)
                        at com.sun.facelets.compiler.Compiler.compile(Compiler.java:104)
                        at com.sun.facelets.impl.DefaultFaceletFactory.createFacelet(DefaultFaceletFactory.java:197)
                        at com.sun.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:144)
                        at com.sun.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:95)
                        at com.sun.facelets.FaceletViewHandler.buildView(FaceletViewHandler.java:517)
                        at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:567)
                        at org.ajax4jsf.framework.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
                        at org.ajax4jsf.framework.ajax.AjaxViewHandler.renderView(AjaxViewHandler.java:233)
                        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)
                        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
                        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
                        ... 30 more
                



                I'll take it further from here...



                • 5. Re: action for s:link is tried to be resolved as property
                  vdweij

                  Problems solved...


                  Lots of problems were caused by switching to Maven 2. Maven itself was not the problem but the way I had specified the dependencies. The seam jar for example would not only be packaged into the ear but also into the war. Also a JBoss jar (dom4j) was packaged causing ClassCastExceptions. This was actually caused by a dependency specified in JBoss Seam's parent POM which I used.


                  For anyone who encounters exceptions that are not addressed in this forum or others, check your jars... :)