[jboss-user] [JBoss Seam] - Problem with seam theme-selector and richfaces skins

misqu23 do-not-reply at jboss.com
Wed Aug 29 05:48:10 EDT 2007


Hello,

I've asked the same question on Richfaces forum but nobody answer that's  way I'm posting it to JBoss Seam forum.

In my application I want to change the skin of richfaces using seam theme-selector component. I have provided two themes default and modern, default theme uses blueSky skin and modern uses ruby. 

Snippet from components.xml
<theme:theme-selector cookie-enabled="true">
  | 	<theme:available-themes>
  | 		<value>default</value>
  | 		<value>modern</value>
  | 	</theme:available-themes>
  | </theme:theme-selector>
  | <web:ajax4jsf-filter enable-cache="false"/>

In default.properties I have the following line
skin blueSky

In modern.properties I have the following line
skin ruby

Here is my web.xml
<context-param>
  | 	<param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>
  | 	<param-value>com.sun.facelets.FaceletViewHandler</param-value>
  | </context-param>
  | <context-param>
  | 	<param-name>org.ajax4jsf.SKIN</param-name>
  | 	<param-value>#{theme.skin}</param-value>
  | </context-param>
  | <context-param>
  | 	<param-name>org.ajax4jsf.COMPRESS_SCRIPT</param-name>
  | 	<param-value>false</param-value>
  | </context-param>
  | <!-- Facelets -->
  | <context-param>
  | 	<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
  | 	<param-value>.xhtml</param-value>
  | </context-param>
  | <context-param>
  | 	<param-name>facelets.DEVELOPMENT</param-name>
  | 	<param-value>true</param-value>
  | </context-param>
  | <context-param>
  | 	<param-name>facelets.REFRESH_PERIOD</param-name>
  | 	<param-value>2</param-value>
  | </context-param>
  | <context-param>
  | 	<param-name>com.sun.faces.validateXml</param-name>
  | 	<param-value>true</param-value>
  | </context-param>
  | <context-param>
  | 	<param-name>com.sun.faces.verifyObjects</param-name>
  | 	<param-value>true</param-value>
  | </context-param>
  | 	
  | <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.ResourceServlet
  | 	</servlet-class>
  | </servlet>
  | <servlet-mapping>
  | 	<servlet-name>Seam Resource Servlet</servlet-name>
  | 	<url-pattern>/seam/resource/*</url-pattern>
  | </servlet-mapping>
  | 
  | <servlet>
  | 	<servlet-name>Faces Servlet</servlet-name>
  | 	<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  | 	<load-on-startup>1</load-on-startup>
  | </servlet>
  | <servlet-mapping>
  | 	<servlet-name>Faces Servlet</servlet-name>
  | 	<url-pattern>*.seam</url-pattern>
  | </servlet-mapping>

Unfortunately during every request I get following error :
22:27:26,140 ERROR [[default]] Servlet.service() for servlet default threw exception
  | org.ajax4jsf.framework.skin.SkinNotFoundException: Name for current Skin calculated as null
  | 	at org.ajax4jsf.framework.skin.SkinFactoryImpl.getSkin(SkinFactoryImpl.java:92)
  | 	at org.ajax4jsf.framework.renderer.compiler.ElementBase$4.getValue(ElementBase.java:302)
  | 	at org.ajax4jsf.framework.renderer.compiler.ElementBase$ValueGetter.getStringOrDefault(ElementBase.java:426)
  | 	at org.ajax4jsf.framework.renderer.compiler.ClassElement.getString(ClassElement.java:87)
  | 	at org.ajax4jsf.framework.renderer.compiler.ClassElement.encode(ClassElement.java:59)
  | 	at org.ajax4jsf.framework.renderer.compiler.ElementBase.encode(ElementBase.java:104)
  | 	at org.ajax4jsf.framework.renderer.compiler.ElementBase.encode(ElementBase.java:104)
  | 	at org.ajax4jsf.framework.renderer.compiler.RootElement.encode(RootElement.java:64)
  | 	at org.ajax4jsf.framework.renderer.compiler.ElementBase.encode(ElementBase.java:72)
  | 	at org.ajax4jsf.framework.resource.TemplateCSSRenderer.send(TemplateCSSRenderer.java:79)
  | 	at org.ajax4jsf.framework.resource.InternetResourceBase.send(InternetResourceBase.java:369)
  | 	at org.ajax4jsf.framework.resource.ResourceLifecycle.send(ResourceLifecycle.java:86)
  | 	at org.ajax4jsf.framework.resource.InternetResourceService.sendResource(InternetResourceService.java:256)
  | 	at org.ajax4jsf.framework.resource.InternetResourceService.serviceResource(InternetResourceService.java:240)
  | 	at org.ajax4jsf.framework.resource.InternetResourceService.serviceResource(InternetResourceService.java:141)
  | 	at org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:261)
  | 	at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:40)
  | 	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
  | 	at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:140)
  | 	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.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(Unknown Source)
  | 22:27:26,171 ERROR [[default]] Servlet.service() for servlet default threw exception
  | org.ajax4jsf.framework.skin.SkinNotFoundException: Name for current Skin calculated as null
  | 	at org.ajax4jsf.framework.skin.SkinFactoryImpl.getSkin(SkinFactoryImpl.java:92)
  | 	at org.ajax4jsf.framework.renderer.compiler.ElementBase$4.getValue(ElementBase.java:302)
  | 	at org.ajax4jsf.framework.renderer.compiler.ElementBase$ValueGetter.getStringOrDefault(ElementBase.java:426)
  | 	at org.ajax4jsf.framework.renderer.compiler.ClassElement.getString(ClassElement.java:87)
  | 	at org.ajax4jsf.framework.renderer.compiler.ClassElement.encode(ClassElement.java:59)
  | 	at org.ajax4jsf.framework.renderer.compiler.ElementBase.encode(ElementBase.java:104)
  | 	at org.ajax4jsf.framework.renderer.compiler.ElementBase.encode(ElementBase.java:104)
  | 	at org.ajax4jsf.framework.renderer.compiler.RootElement.encode(RootElement.java:64)
  | 	at org.ajax4jsf.framework.renderer.compiler.ElementBase.encode(ElementBase.java:72)
  | 	at org.ajax4jsf.framework.resource.TemplateCSSRenderer.send(TemplateCSSRenderer.java:79)
  | 	at org.ajax4jsf.framework.resource.InternetResourceBase.send(InternetResourceBase.java:369)
  | 	at org.ajax4jsf.framework.resource.ResourceLifecycle.send(ResourceLifecycle.java:86)
  | 	at org.ajax4jsf.framework.resource.InternetResourceService.sendResource(InternetResourceService.java:256)
  | 	at org.ajax4jsf.framework.resource.InternetResourceService.serviceResource(InternetResourceService.java:240)
  | 	at org.ajax4jsf.framework.resource.InternetResourceService.serviceResource(InternetResourceService.java:141)
  | 	at org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:261)
  | 	at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:40)
  | 	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
  | 	at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:140)
  | 	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.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(Unknown Source)

Of course page looks like plain html without  any styling attached to it.
It looks like ajax4jsf can't resolve el #{theme.skin} to "blueSky" or "ruby" it resolvses this el to string "default" I guess. 
This line suggest this 22:27:26,140 ERROR [[default]] Servlet.service() for servlet default threw exception
  | org.ajax4jsf.framework.skin.SkinNotFoundException: Name for current Skin calculated as null

Ajax4jsf filter is configured in the components.xml but it also doesn't work when I configure it in web.xml. 

What am I doing wrong ? Do I have to write my own managed bean which holds selected skin name ? 
Can't I just use theme seam component to select proper skin.
When my web.xml looks like :
<context-param>
  | 	<param-name>org.ajax4jsf.SKIN</param-name>
  | 	<param-value>blueSky</param-value>
  | </context-param> 
everything works fine even skinning non richfaces components through the xcss. Here is code snippet from sample page : 
<a4j:loadStyle src="resource://#{themePath}/#{theme.cssSkinMapper}" />

What am I doing wrong ?

Best regards !
Marcin Misiewicz


View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4079059#4079059

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4079059



More information about the jboss-user mailing list