我想在 EL 中声明一个条件方法表达式,如下所示:
<p:dataTable id="#{cc.attrs.datatableId}" var="overview"
rowSelectListener="#{cc.attrs.detailsMode == 'single' ? cc.attrs.bean.onRowSelect : cc.attrs.bean.onRowUrlSelect}">
但是,它会抛出 EL 异常:
javax.el.ELException:不是有效的方法表达式:#{ cc.attrs.detailsMode == 'single' ? cc.attrs.bean.onRowSelect : cc.attrs.bean.onRowUrlSelect}
如何声明条件 EL 方法表达式?
不幸的是,方法表达式不接受值表达式。最好的选择是拥有一个方法入口点,该入口点又根据detailsMode
您也可以将其传递/设置为 bean。
E.g.
<h:dataTable ... rowSelectListener="#{cc.attrs.bean.onRowSelect}">
public void onRowSelect(SelectEvent event) {
if ("single".equals(detailsMode)) {
onRowSingleSelect(event);
} else {
onRowUrlSelect(event);
}
}
鉴于您实际上使用的是复合组件,如有必要,您可以将其隐藏在支持组件中,以减少支持 bean 中的样板代码:
<cc:interface componentType="yourComponent">
...
<h:dataTable ... rowSelectListener="#{cc.onRowSelect}">
@FacesComponent("yourComponent")
public class YourComponent extends UINamingContainer {
public void onRowSelect(SelectEvent event) {
String methodName = "single".equals(detailsMode) ? "onRowSingleSelect" : "onRowUrlSelect";
MethodExpression method = (MethodExpression) getAttributes().get(methodName);
method.invoke(getFacesContext().getELContext(), new Object[] { event });
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)