【问题标题】:How to set a bean property before executing this f:event listener如何在执行此 f:event 侦听器之前设置 bean 属性
【发布时间】:2012-06-17 04:20:59
【问题描述】:

如何在执行这个 f:event 监听器之前从 jsf 页面设置一个 bean 属性:

    <f:event type="preRenderComponent" listener="bean.method}"/>

我尝试了下面的代码,但它没有将值设置为 bean 属性。

    <f:event type="preRenderComponent" listener="bean.method}">
        <f:setPropertyActionListener target="#{bean.howMany}" value="2"/>
    </f:event>

JSF2.1.6 和 PF 3.3


编辑

以下代码有任何问题吗? (这行得通!但我只是想确认一下这是否有任何问题!?)

<f:event type="preRenderComponent" listener="#{bean.setHowMany(15)}"/> 
<f:event type="preRenderComponent" listener="#{bean.method}"/>

【问题讨论】:

    标签: java jsf


    【解决方案1】:

    试试

    <f:event type="preRenderComponent" listener="#{bean.method('2')}"/>
    

    如果这不起作用,请尝试

    <f:event type="preRenderComponent" listener="#{bean.method}">
        <f:attribute name="howMany" value="2" />
    </f:event>
    

    在你的托管 bean 中添加以下内容

    public void method(ComponentSystemEvent event) {
        String howMany = (String) event.getComponent().getAttributes().get("howMany");
    }
    

    我认为你最好避免两个后续的 &lt;f:event&gt; 调用,当你真的不需要它们时,虽然我想我在某处看到声明的顺序将是执行的顺序,它仍然可能在不同的 JSF 实现之间有所不同而且您永远无法 100% 确定您可以信赖它...

    所以在这种情况下,INMO 只使用一个会更好

    <f:event type="preRenderComponent" listener="#{bean.method(15)}"/>
    

    【讨论】:

    • 非常感谢!但是有任何理由避免这种方式(只是让我想到)..&lt;f:event type="preRenderComponent" listener="#{bean.setHowMany(15)}"/&gt;&lt;f:event type="preRenderComponent" listener="#{bean.method}"/&gt;
    猜你喜欢
    • 2016-04-22
    • 2016-01-17
    • 2016-10-30
    相关资源
    最近更新 更多