【问题标题】:JSF, Spring, and the PreRenderViewEventJSF、Spring 和 PreRenderViewEvent
【发布时间】:2011-10-14 02:44:51
【问题描述】:

我正在尝试将 Spring 3 集成到 JSF 2 项目中。我registered 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 停止了工作。在呈现视图之前,我一直在使用此事件调用 backing-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 无法执行任何操作。

【问题讨论】:

    标签: java spring jsf jsf-2


    【解决方案1】:

    这与弹簧无关,但据我所知,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>
    

    【讨论】:

    • 天啊!你是对的,肯定赢得了荣誉。现在,事件侦听器工作正常。不幸的是, 似乎仍然没有任何效果(调用 preRenderView 时 locationBean.id 始终为 0)。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多