我正在尝试将Spring 3集成到JSF 2项目中。我在faces-config.xml中注册了SpringBeanFacesELResolver,并在web.xml中添加了两个侦听器:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
大多数视图和支持bean都可以正常工作,但不幸的是,javax.faces.event.PreRenderViewEvent
停止工作了。在渲染视图之前,我一直使用这个事件在后台bean中调用一个方法:
<ui:define name="metadata">
<f:event type="javax.faces.event.PreRenderViewEvent"
listener="#{locationBean.preRenderView}" />
</ui:define>
使用Spring 3来创建bean,不再调用preRenderView
方法。我将非常感谢任何提示我可能做错了什么或错过!
更新:
在同一视图中,我试图将参数绑定到支持bean的属性,如下所示:
<ui:define name="metadata">
<f:metadata>
<f:viewParam name="id" value="#{locationBean.id}" label="id" />
</f:metadata>
</ui:define>
这在使用"纯"JSF 2时也可以工作,但在使用Spring时却不能做任何事情。
这不是真正的春季相关,但据我所知,f:metadata
标签必须包含在模板客户端内,并直接插入f:view
内。可以在JSFAtWork中找到一个示例。链接是德语的,但我希望代码示例清楚。
你的代码应该是这样的
<ui:define name="metadata">
<f:metadate>
<f:event type="javax.faces.event.PreRenderViewEvent"
listener="#{locationBean.preRenderView}" />
</f:metadate>
</ui:define>
使用以下模板
<f:view>
<ui:insert name="metadata"/>
...
</f:view>