Динамический вызов метода в 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]}">