web-dev-qa-db-ja.com

JSFページからの引数を使用したBeanメソッドの呼び出し

最初にBeanプロパティを設定してから、commandButtonなどを使用して引数なしでメソッドを呼び出す代わりに、Beanメソッドを呼び出してビューから直接パラメーターを渡すことは可能ですか?

アイテムのリストがあり、各アイテムにはアクションのリストがあります。状態を減らすために、いくつかのremoteCommand(s)の代わりに単一の素数commandButtonを使用しています。ビューからアクショントリガーを取得するときに、JavaScriptからremoteCommandを呼び出しますが、remoteCommandは1つなので複数のアイテムに使用されるため、アイテムのIDも渡す必要があります。最初にBeanプロパティとして設定するのではなく、項目のIDを直接引数としてBeanメソッドに渡す方法があるかどうか疑問に思っています。そうする方法はありますか?

実際には、ページに項目の長いリストがある場合に、ページ上の複数のcommandButtonを処理するためのより良い方法を探しています。

提案?ありがとう。


Primefaces 3.0RC1でのJSF 2.1.6 Mojarraの使用

14
Rajat Gupta

メソッド引数の引き渡しは、サーブレット3.0の一部であるEL 2.2以降でサポートされています。したがって、Webアプリケーションがweb.xmlで宣言されたServlet 3.0仕様に準拠するServlet 3.0互換コンテナ(Tomcat 7、Glassfish 3など)で実行される場合(暗黙的にServletを必要とするJSF 2.1を使用しているため、これはおそらく当てはまります) 3.0)、その後、次の形式でBeanアクションメソッドにメソッド引数を渡すことができます。

<h:commandButton value="Submit" action="#{bean.submit(item.id)}" />

public void submit(Long id) {
    // ...
}

次のように、価値のあるオブジェクトを渡すこともできます。

<h:commandButton value="Submit" action="#{bean.submit(item)}" />

public void submit(Item item) {
    // ...
}

サーブレット2.5コンテナーをターゲットにしている場合は、EL実装を、たとえば同じ構造をサポートするJBoss ELで置き換えることで同じことを達成できます。 ELの引数/変数/パラメータを使用して直接メソッドまたはメソッドを呼び出す も参照してください。

21
BalusC

はい、そうです。

<h:commandButton action="#{bean.method(object)}" />

これを見る http://www.mkyong.com/jsf2/4-ways-to-pass-parameter-from-jsf-page-to-backing-bean/

10
user219882

このような引数でManagedBeanメソッドを呼び出すことができます。

<h:commandButton actionListener="#{stateBean.delete(row.stateID)}" 
 value="Delete" id="btnDeleteS">

   <f:ajax event="action" execute="@form" render="@form"/>
</h:commandButton>

対応するManagedBeanは次のようになります。

@ManagedBean
@RequestScoped
public class StateBean
{
    @EJB
    private RemoteInterface obj=null;

    public void delete(String stateID)
    {
        //Code stuff here.
    }
}

このように<f:setPropertyActionListener></f:setPropertyActionListener>を使用して、ManagedBeanプロパティの値を直接設定することもできます。

<h:commandButton value="Delete" id="btnDeleteS">

     <f:setPropertyActionListener target="#{stateBean.someProperty}"
       value="#{someValue}"/>
     <f:ajax event="action" execute="@form" render="@form"/>
</h:commandButton>
8
Lion