在<f:event listener =“#{myBean.retrieveData(#{})”> </f:event>中传递一个参数

时间:2012-04-06 04:19:34

标签: java jsf jsf-2

我需要动态地使用数据库填充一个数据表,其中我需要调用retieveData()方法并将id传递给方法中的条件。要传递的参数来自#{anotherBean.id}的另一个bean。我的问题是如何在方法中传递这个参数......? 以下是我想要做的......

<f:metadata>
     <f:event listener="#{myBean.retrieveData(#{anotherBean.id)}" type="preRenderComponent" id="fevent"/>
</f:metadata> 

2 个答案:

答案 0 :(得分:7)

您可以通过属性传递它。

以下是我在JSF上所做的事情:

<f:metadata>
    <f:event listener="#{myBean.retrieveData}" type="preRenderView" id="fevent"/>
    <f:attribute name="myid" value="#{anotherBean.id)" />
</f:metadata>

同时托管bean(myBean)如下:

public void retrieveData(ComponentSystemEvent event) {
    String id = (String) event.getComponent().getAttributes().get("myid");
}

在f:event tag的监听器上调用托管bean的方法时,请确保不要使用'()'。

答案 1 :(得分:3)

基本上

<f:metadata>
     <f:event listener="#{myBean.retrieveData(anotherBean.id)}" type="preRenderComponent" id="fevent"/>
</f:metadata>

应该这样做。但是为什么不将anotherBean注入myBean并在Java代码中检索id?通常最好在Java代码中保留这种逻辑,而不是在这种情况下查看-xhtml文件。