Динамический вызов метода в EL, который вычисляется из строки

У меня есть кнопка отправки. Эта кнопка отправки имеет атрибут "действие". Но этот атрибут действия всегда должен вызывать другую функцию (своего рода универсальную). Поэтому я хочу вызывать функцию динамически. Это потому, что мне нужно повторно использовать этот компонент. Я просто не знаю, какой тип необходим атрибут действия (метод, строка и т. Д.?) И как правильно ссылаться на требуемый "BeanWithMethodToCall".

@Named
@SessionScoped
public class BeanWithMethodToCall{

   @Inject
   private BeanWhichIsCalledFromEL elBean;

   public void methodToCall(){
      //do something
   }

   public void someLogic(){
      // here the wanted method is set on the bean which is later on called from el
      elBean.setMethodToCall("methodToCall");
   }
}

@Named
@SessionScoped
public class BeanWhichIsCalledFromEL{

   // i don't know the correct type of this :S
   private String method;

   public void setMethodToCall(String method){
      this.method = method;
   }

   // i don't know the correct return type of this :S
   public String getMethodToExecute(){
      //this method is called in the action attribute in the xhtml 
      // and should return a dynamic function to call
   }

}

В EL:

<h:commandButton value="Cancel" action="#{beanWhichIsCalledFromEL.getMethodToExecute()}">
    <f:ajax render="@form"/>
</h:commandButton>

Это кажется хитрым.. Я надеюсь, что кто-нибудь может мне помочь. Мне нужно отражение? или EL Resolver или что-нибудь еще??

1 ответ

Решение

Используйте обозначение скобки #{bean[foo]} оценить "динамический" метод и имена свойств.

Ваш конкретный случай может быть решен, как показано ниже:

<h:commandButton ... action="#{bean[bean.methodToExecute]}">

Смотрите также:

Другие вопросы по тегам