将参数传递给 f:event 侦听器

Pass a parameter to f:event listener

我有以下 preRenderView 类型的事件来在加载页面之前执行一个方法:

<f:event listener="#{aprobacionFlujoController.preRender}" type="preRenderView" />

我需要给那个监听器发送一个参数,这是最好的方法,探测如下:

<f:metadata>
    <f:event listener="#{aprobacionFlujoController.preRender}" type="preRenderView" />
    <f:attribute name="myid" value="true" />
</f:metadata>

控制器

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

但是 getAttributes() 方法 returns 为空。

好吧,如果您使用的是 JSF 2.2,那么您可以使用 <f:viewAction /> 在呈现页面之前执行任务,因为据我所知,您想要实现的是从数据库中检索数据以显示,换句话说就是拥有一个动态网页。

在您的 facelets 页面中:

<h:head>
  <f:metadata>
    <f:viewParam name="parameter_id" value="#{yourbean.searchId}" />
    <f:viewAction action="#{yourbean.getInfo}" />
  </f:metadata>
</h:head>

viewParam所做的是设置value属性中传递的属性;此 属性 作为 HTTP GET REQUEST 参数出现,例如:

yourwebsite.com/yourpage.xhtml?parameter_id=parameter_value

在您的 Managed Baen 中,您只有一个使用 属性:

执行数据提取的方法
@NAmed
@your_scope
public class YourBean implements Serializable{

   private String searchId;

   public void getInfo(){
     yourService.getData(searchId);
    // ... the rest .... 
  }

 // setter & getter for searchId
}

如果您想按照自己的方式进行操作,假设是因为您使用的是 JSF 2.1 | 2.0 然后也许试试这个来获取请求参数:

String parameter = ((Map<String,String>)Facescontext.getExternalContext().getRequestParameterMap()).get("your_parameter_name");