我想将一些属性传递给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 Action Listener中
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。
答案 0 :(得分:3)
如果#{data}
引用迭代JSF组件(例如<h:dataTable var>
)的迭代变量,则无效。 <f:attribute>
在JSF视图构建期间设置,而不是在JSF视图渲染时间期间设置。但是,<h:dataTable var>
在视图构建期间不可用,它仅在视图渲染时可用。
如果您的环境支持EL 2.2,请改为
<p:menuitem ... actionListener="#{customerProductsBean.getProductSetupData(data)}" />
与
public void getProductSetupData(Data data) {
// ...
}
如果您的环境没有,请改为
public void getProductSetupData(ActionEvent event) {
FacesContext context = FacesContext.getCurrentInstance();
Data data = context.getApplication().evaluateExpressionGet(context, "#{data}", Data.class);
// ...
}