【发布时间】:2011-06-02 23:37:18
【问题描述】:
我一直在尝试使上述设置工作好几天,但收效甚微。我的问题似乎与资源处理程序有关。 IE。
<h:outputStylesheet name="header.css" library="page"/>
不起作用,RichFaces 也不能解析它在内部使用的任何资源。所以我做了一些调查,上面的标签应该解析为“/project/javax.faces.resource/header.css?ln=page”,但事实并非如此。 2个明显的问题正在发生。
1) 资源处理程序链中的某些东西,可能是richfaces 处理程序,期望将“.jsf”后缀添加到请求的 url,这在使用带有 JSF2 和 RichFaces 3.3.x 的旧 EXTERNAL facelets 时确实会发生,但是 Richfaces 4 和内置的 facelets 不会发生。结果,其中一个处理程序(我相信是 RichFaces)正在剥离 .css 后缀,认为它是一个额外的后缀,就像它过去的工作方式一样。 (因此这会导致缺少 MIME 类型错误)
2) 解析库和名称属性时,将在当前路径而不是 servlet 上下文根下解析。 IE。它应该解析为“/project/javax.faces.resource/...”,但在查看 /index 目录中的页面时,它会解析为“/project/index/javax.faces.resource/...”。
谁能在这里给我一些见解?我正在用我的头撞到墙上,没有做任何真正的地面。
顺便说一下,这是我的基本配置......
faces-config.xml
<application>
<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
</application>
web.xml
<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>*.jsf</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Spring MVC Servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Spring MVC Servlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
servlet-context.xml
<beans:bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<beans:property name="viewClass" value="org.springframework.faces.mvc.JsfView"/>
<beans:property name="prefix" value="/WEB-INF/content/" />
<beans:property name="suffix" value=".xhtml" />
</beans:bean>
<beans:bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping">
<beans:property name="order" value="2"/>
<beans:property name="flowRegistry" ref="flowRegistry" />
</beans:bean>
<beans:bean class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter">
<beans:property name="flowExecutor" ref="flowExecutor" />
<beans:property name="ajaxHandler">
<beans:bean class="org.springframework.faces.richfaces.RichFacesAjaxHandler"/>
</beans:property>
</beans:bean>
<beans:bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<beans:property name="viewClass" value="org.springframework.faces.mvc.JsfView"/>
<beans:property name="prefix" value="/WEB-INF/content/" />
<beans:property name="suffix" value=".xhtml" />
</beans:bean>
<beans:bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
<beans:bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<beans:property name="order" value="3" />
<beans:property name="alwaysUseFullPath" value="true" />
<beans:property name="mappings">
<beans:value>
</beans:value>
</beans:property>
<beans:property name="defaultHandler">
<beans:bean class="org.springframework.web.servlet.mvc.UrlFilenameViewController" />
</beans:property>
</beans:bean>
webflow-config.xml
<faces:resources/>
<beans:bean id="facesContextListener" class="org.springframework.faces.webflow.FlowFacesContextLifecycleListener"/>
<flow-executor id="flowExecutor">
<flow-execution-listeners>
<listener ref="facesContextListener"/>
</flow-execution-listeners>
</flow-executor>
<flow-registry id="flowRegistry" base-path="/WEB-INF/content" flow-builder-services="flowBuilderServices">
<flow-location-pattern value="/**/flow.xml" />
</flow-registry>
<flow-builder-services id="flowBuilderServices" development="true" />
【问题讨论】:
-
好的,所以我解决了一半的问题。看来您不能使用 SimpleUrlHandlerMapping。看起来这是在错误的上下文中解析资源的原因(即在应该只是 / 时使用 /index )。知道我是否只能解决 .jsf 扩展的问题。
-
我还没有取得很大的进步......但是(不是任何人都在读这个);我现在最终选择了 RichFaces 3.3.3,但我仍然致力于解决这个问题。
-
因此,将调度程序 servlet 映射到 /*,
应该解析为 /Servlet/javax.faces.resource /file.gif?ln=目录名。我知道资源处理程序正在工作,因为直接将已解析的资源 URL 放入其中会起作用。唯一的问题是 spring 上下文映射被插入到解析的 URL 中。例如。 /Servlet/*/javax.faces.resource/file.gif?ln=dirname 所以要么问题是正在插入 Spring 上下文,要么资源处理程序应该忽略 /javax.faces.resource 之前的所有内容
标签: spring spring-mvc jsf-2 richfaces spring-webflow