将参数传递给f:event listener

时间:2016-11-21 22:18:21

标签: jsf parameter-passing metadata 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()方法返回空。

1 个答案:

答案 0 :(得分:0)

好吧,如果您使用的是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

在您的托管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");