残念ながら、メソッド式は値式を受け入れません。最善の策は、単一のメソッドエントリポイントを用意することです。このエントリポイントdetailsMode
は、Beanに渡す/設定するメソッドに基づいて、目的のアクションメソッドにさらに委任します。
例えば
<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 });
}
}