【问题标题】:Pass a parameter to f:event listener将参数传递给 f:event 监听器
【发布时间】:2016-11-21 22:18:21
【问题描述】:

我有以下 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() 方法返回空。

【问题讨论】:

    标签: jsf parameter-passing metadata event-listener


    【解决方案1】:

    好吧,如果您使用的是 JSF 2.2,那么您可以使用 &lt;f:viewAction /&gt; 在页面呈现之前执行任务,因为您试图实现的目标是从数据库中检索数据以进行显示,换句话说拥有一个动态网页。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-21
      • 2016-02-26
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-25
      相关资源
      最近更新 更多