К сожалению, выражения метода не принимают выражения значений. Лучше всего иметь точку входа с одним методом, которая, в свою очередь, делегирует желаемые методы действия на основе detailsMode
, который вы также передаете / задаете для bean-компонента.
Е.Г.
<h:dataTable ... rowSelectListener="#{cc.attrs.bean.onRowSelect}">
public void onRowSelect(SelectEvent event) {
if ("single".equals(detailsMode)) {
onRowSingleSelect(event);
} else {
onRowUrlSelect(event);
}
}
Учитывая, что вы на самом деле используете составной компонент, вы можете при необходимости спрятать его в компоненте поддержки, чтобы уменьшить шаблон в компоненте:
<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 });
}
}