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

4
guerilla 25 Мар 2011 в 17:35

2 ответа

Лучший ответ

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

}
6
BalusC 12 Авг 2015 в 12:20

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

<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

0
Fabrizio Paglia 26 Сен 2018 в 19:02