4

送信ボタンがあります。この送信ボタンには「action」属性があります。ただし、このアクション属性は常に別の関数 (ある種のジェネリック) を呼び出す必要があります。だから私は動的に関数を呼び出したい。これは、このコンポーネントを再利用する必要があるためです。アクション属性に必要なタイプ(メソッド、文字列など)と、必要な「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リゾルバーまたは何か??

4

1 に答える 1

8

#{bean[foo]}「動的な」メソッドとプロパティ名を評価するには、ブレース表記を使用します。

特定のケースは、次のように解決できます。

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

以下も参照してください。

于 2015-10-20T16:22:01.010 に答える