在加载页面之前,我有以下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()方法返回空。
答案 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");