2012-03-29 6 views
0

いくつかの属性をactionListenerメソッドに渡したいと思います。Primefaces p:menuitemは、actionListenerに属性を渡します。

私の実装は似ている...

<c:forEach items="${customerProductsBean.userProductList}" var="userProduct"> 
    <p:panel toggleable="#{true}" toggleSpeed="500" header="#{userProduct.product}" > 
     // Some Code... Data Table and Tree Table 

     <f:facet name="options"> 
      <p:menu> 
       <p:menuitem value="ProductSetup" actionListener="#{customerProductsBean.getProductSetupData}" > 
         <f:attribute name="userIdParam" value="#{data.userId}"/> 
         <f:attribute name="geCustomerIdParam" value="#{data.geCustomerId}"/> 
         <f:attribute name="acpProductParam" value="#{data.acpProduct}"/> 
       </p:menuitem> 
       <p:menuitem value="Remove Product" url="#" onclick=""/> 
      </p:menu> 
     </f:facet> 
    </p:panel> 
</c:forEach> 

とJavaアクション・リスナーで

public void getProductSetupData(ActionEvent actionEvent) { 
     try { 
      String userIdParam = 
    (String)actionEvent.getComponent().getAttributes().get("userIdParam"); 
      String geCustomerIdParam = 
    (String)actionEvent.getComponent().getAttributes().get("geCustomerIdParam"); 
      String acpProductParam = 
    (String)actionEvent.getComponent().getAttributes().get("acpProductParam"); 
     } catch(Exception e) { 
      // Exception 
     } 
} 

私は<f:attribute><f:param>を使用して、それを試してみましたが、Javaで値を取得することができませんでした。

javaでは、各値にnullが表示されます。

答えて

3

#{data}が、反復するJSFコンポーネントの反復変数(<h:dataTable var>など)を参照する場合、これは機能しません。 <f:attribute>は、JSFビューのビルド時に設定され、JSFビューのレンダリング時には設定されません。ただし、ビューの作成時には<h:dataTable var>を使用できません。ビューのレンダリング時にのみ使用できます。

環境がEL 2.2をサポートしている場合は、代わりに

public void getProductSetupData(Data data) { 
    // ... 
} 

またはあなたの環境がない場合は、代わりに

public void getProductSetupData(ActionEvent event) { 
    FacesContext context = FacesContext.getCurrentInstance(); 
    Data data = context.getApplication().evaluateExpressionGet(context, "#{data}", Data.class); 
    // ... 
} 
+0

へやBalusCを行うと

<p:menuitem ... actionListener="#{customerProductsBean.getProductSetupData(data)}" /> 

を行う...ありがとう返信....問題が解決しました。実際には#{data}は範囲外でした。 –

関連する問題