right... i'm having another try at upgrading to seam 2.0.0CR1!
I've narrowed the problem down to being something to with the RichFaces integration.
Specifically, the RichFaces tab panel doesn't seem to be able to access Seam
components through the EL. I've changed the RichFaces jar files to the 3.1.1 snapshot
release and it is displaying the RichFaces tab panel correctly - it's just getting
hold of seam components that is failing. This is giving the 'In attribute requires
non-null value' error.
The xhtml file snippet is:
| <h:form class="homepage" id="homepageform"
enctype="multipart/form-data">
|
| <h:inputText value="#{userView.selectedTab}"
id="selectedTab"/>
|
| <rich:tabPanel switchType="client"
selectedTab="#{userView.selectedTab}">
|
| ...
|
The standard jsf inputText component above the tab panel picks up the
#{userView.selectedTab} fine, and if I put debug output in the selectedTab getter for the
userView bean I can see it is being called without any problems by the jsf widget. But
with the richfaces tab panel i get this stack trace:
| 15:28:18,282 admin WARN [lifecycle] executePhase(RESTORE_VIEW
1,com.sun.faces.context.FacesContextImpl@8bfd35) threw exception
| javax.faces.FacesException: javax.el.ELException: /admin/adminhome.xhtml @25,78
selectedTab="#{userView.selectedTab}": Error reading 'selectedTab' on
type org.javassist.tmp.java.lang.Object_$$_javassist_3
| at javax.faces.component.UIOutput.getValue(UIOutput.java:176)
| at org.richfaces.component.UITabPanel.getValue(UITabPanel.java:70)
| at org.richfaces.component.UITabPanel.getRenderedValue(UITabPanel.java:96)
| at org.richfaces.component.UITabPanel.restoreState(UITabPanel.java:119)
| at
org.richfaces.component.html.HtmlTabPanel.restoreState(HtmlTabPanel.java:985)
| at
javax.faces.component.UIComponentBase.processRestoreState(UIComponentBase.java:1138)
| at
javax.faces.component.UIComponentBase.processRestoreState(UIComponentBase.java:1154)
| at
javax.faces.component.UIComponentBase.processRestoreState(UIComponentBase.java:1154)
| at
javax.faces.component.UIComponentBase.processRestoreState(UIComponentBase.java:1154)
| at
org.ajax4jsf.application.AjaxStateManager.restoreView(AjaxStateManager.java:245)
| at
com.sun.faces.application.ViewHandlerImpl.restoreView(ViewHandlerImpl.java:287)
| at org.jboss.seam.jsf.SeamViewHandler.restoreView(SeamViewHandler.java:93)
| at
com.sun.facelets.FaceletViewHandler.restoreView(FaceletViewHandler.java:316)
| at
org.ajax4jsf.application.ViewHandlerWrapper.restoreView(ViewHandlerWrapper.java:116)
| at
org.ajax4jsf.application.AjaxViewHandler.restoreView(AjaxViewHandler.java:159)
| at
com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:141)
| at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
| at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
| at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
| 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.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:44)
| at
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
| at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
| at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
| at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:60)
| at
org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
| 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.servlet.SeamFilter.doFilter(SeamFilter.java:150)
| 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)
|
| <snip>
|
| Caused by: org.jboss.seam.RequiredException: In attribute requires non-null value:
userView.entityController
| at org.jboss.seam.Component.getValueToInject(Component.java:2169)
| at org.jboss.seam.Component.injectAttributes(Component.java:1599)
| at org.jboss.seam.Component.inject(Component.java:1417)
| at
org.jboss.seam.core.BijectionInterceptor.aroundInvoke(BijectionInterceptor.java:45)
| at
org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
| at
org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:42)
| at
org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
| at
org.jboss.seam.persistence.EntityManagerProxyInterceptor.aroundInvoke(EntityManagerProxyInterceptor.java:26)
| at
org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
| at
org.jboss.seam.persistence.HibernateSessionProxyInterceptor.aroundInvoke(HibernateSessionProxyInterceptor.java:27)
| at
org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
| at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:106)
| at
org.jboss.seam.intercept.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:50)
| at sun.reflect.GeneratedMethodAccessor1494.invoke(Unknown Source)
| at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:597)
| at
org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:118)
| at
org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
| at
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at
org.jboss.ejb3.entity.ExtendedPersistenceContextPropagationInterceptor.invoke(ExtendedPersistenceContextPropagationInterceptor.java:57)
| at
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at
org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
| at
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at
org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
| at
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
| at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126)
| ... 96 more
|
|
|
It seems to be complaining about the injected EntityController object, which gets created
fine everywhere else it is accessed apart from in this tabpanel. This is how i inject it:
| @In(create=true)
| private EntityController ec;
|
Do I need to change anything in my web.xml maybe for this release? I currently have:
| <!-- Ajax4jsf -->
| <context-param>
| <param-name>org.richfaces.SKIN</param-name>
| <param-value>blueSky</param-value>
| </context-param>
|
| <context-param>
| <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>
| <param-value>com.sun.facelets.FaceletViewHandler</param-value>
| </context-param>
|
| <!-- Seam -->
|
| <listener>
|
<listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
| </listener>
|
| <filter>
| <filter-name>Seam Filter</filter-name>
| <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
| </filter>
|
| <filter-mapping>
| <filter-name>Seam Filter</filter-name>
| <url-pattern>/*</url-pattern>
| </filter-mapping>
|
| <servlet>
| <servlet-name>Seam Resource Servlet</servlet-name>
|
<servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>
| </servlet>
|
| <servlet-mapping>
| <servlet-name>Seam Resource Servlet</servlet-name>
| <url-pattern>/seam/resource/*</url-pattern>
| </servlet-mapping>
|
| ...
|
|
I looked at the seam-examples for seamdiscs, which has richfaces integrated, and there is
no richfaces filter defined in the web.xml - just a comment to say it is now handled by
the seam filter, so I took the richfaces filter part out.
The tab panel renders ok if I put a static value in like
<rich:tabPanel switchType="client" selectedTab="homePage">
and I can access seam components through other widgets, it's just the two things
together that don't seem to play nicely!
so has anyone got any bright ideas about this one? any help at all would be greatly
appreciated! :)
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4088888#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...