2011-12-25 23 views
10

Beanのメソッドを&に直接呼び出すことは、Beanのプロパティを最初に設定してからcommandButtonなどの引数を使用してメソッドを呼び出す必要はありません。JSFページからの引数を使用してBeanメソッドを呼び出す

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

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

提案ですか?ありがとう。 JSF 2.1.6を使用


クロサギ科Primefacesメソッドの引数を渡す3.0RC1

答えて

18

とは、サーブレット3.0の一部であるEL 2.2からサポートされています。したがって、あなたのWebアプリケーションがサーブレット3.0互換のコンテナ(Tomcat 7、Glassfish 3など)上でweb.xmlと宣言されているServlet 3.0仕様(JSF 2.1を使用しているため、サーブレット3.0が暗黙に必要な場合)あなたもなどのように沿ってfullworthyオブジェクトを渡すことができます

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

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

と:あなたは次の形式でBeanのアクション・メソッドへのメソッドの引数を渡すことができるようになります

<h:commandButton value="Submit" action="#{bean.submit(item)}" /> 
あなたはサーブレット2.5コンテナをターゲットにしていた場合

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

することは、あなたは同じ構文をサポートしています例えばJBossのELによってELの実装を置き換えることによって、同じことを達成できます。 Invoke direct methods or methods with arguments/variables/parameters in ELも参照してください。

+0

タグまたはコンポーネント内でこれも可能ですか?Beanをコンポーネント/タグに渡すと、Beanを保持する属性のメソッドを呼び出します。 'action ="#{myBean ['actionToCall']} "'。私の頭の上から、 'f:setPropertyActionListener'を設定する以外に、大括弧の構文でパラメータを渡す方法はわかりません。この場合、点の上にかっこが必要です。 – Louise

+1

@ルイズ: 'action ="#{myBean ['actionToCall'](someParam)} ''を使用してください。この構文は古いTomcatとGlassfishのバージョンではバグがあったことに注意してください。 Tomcat 7.0.22とGlassfish 3.1.2以降でのみ正しく動作するはずです。 – BalusC

+0

この "item"(または "item.id")はどこから来ますか?それはp:tabView(primefaces)で選択されたp:tabのidのようなものになりますか? –

7

あなたはこのような引数を持つ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> 
+2

+1 theeのpropertyActionListenerが私にとって最善の方法です – jpganz18

関連する問題