JSF, Spring, and the PreRenderViewEvent



我正在尝试将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>

相关内容

  • 没有找到相关文章

最新更新