1

如何在执行此 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}"/>
4

1 回答 1

3

尝试

<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");
}

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

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

<f:event type="preRenderComponent" listener="#{bean.method(15)}"/>
于 2012-06-17T05:37:28.697 回答