EL Условный метод Выражение - PullRequest
3 голосов
/ 25 марта 2011

Я хотел бы объявить выражение условного метода в 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?

Ответы [ 2 ]

6 голосов
/ 25 марта 2011

К сожалению, выражения метода не принимают выражения значений. Лучше всего иметь точку входа с одним методом, которая, в свою очередь, делегирует желаемые методы действия на основе 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 });
     }

}
0 голосов
/ 26 сентября 2018

Вы можете попробовать с

<p:dataTable id="#{cc.attrs.datatableId}" var="overview" 
    rowSelectListener="#{cc.attrs.bean[cc.attrs.detailsMode == 'single' ? 'onRowSelect' : 'onRowUrlSelect']}">

Для дальнейшего ознакомления, вы можете обратиться к https://docs.oracle.com/javaee/6/tutorial/doc/bnahu.html#bnahz

...