2010-11-29 3 views
3

を使用して動的メニューを作成します。JSF - 私は何をしたいのですが説明するのは簡単ですAJAX&selectOneListbox

bean

@ManagedBean 
@ViewScoped 
public class Articles { 
    private String selectedMenu; 

    @PostConstruct 
    public void init() { 
     if(selectedMenu==null || selectedMenu.trim().isEmpty()) { 
      this.selectedMenu="0"; 
     } 
    } 

    public String getSelectedMenu() { return selectedMenu; } 
    public void setSelectedMenu(String selectedMenu) { this.selectedMenu = selectedMenu; } 
} 

page

<h:selectOneListbox onchange="..?? ajax call that render on loadMenu and pass the value of the focused listbox to Articles Bean" id="category" size="0" > 
    <f:selectItem itemLabel="first" itemValue="0" /> 
    <f:selectItem itemLabel="second" itemValue="1" /> 
    <f:selectItem itemLabel="third" itemValue="2" /> 
</h:selectOneListbox> 

<h:panelGroup layout="block" id="loadMenu"> 
    <h:panelGroup rendered="#{articles.selectedMenu=='0'}"> 
     MENU 0 
    </h:panelGroup> 

    <h:panelGroup rendered="#{articles.selectedMenu=='1'}"> 
     MENU 1 
    </h:panelGroup> 

    <h:panelGroup rendered="#{articles.selectedMenu=='2'}"> 
     MENU 2 
    </h:panelGroup> 
</h:panelGroup> 

を私が変更した場合リストボックスの値は、(サーバー上の関数を呼び出すことによって)メニューが動的に変化するはずです。上記のコードは、私が探しているものを表現していると思います。

onchangeオプションを使用して呼び出す方法を知っておく必要があります。出来ますか?

乾杯

UPDATE

<h:panelGroup layout="block"> 
    <h:selectOneListbox styleClass="article_combo" size="0" id="selectedMenu" > 
     <f:selectItem itemLabel="first" itemValue="0" /> 
     <f:selectItem itemLabel="second" itemValue="1" /> 
     <f:selectItem itemLabel="third" itemValue="2" /> 

     <f:ajax event="change" execute="@this" render="loadMenu" /> 
    </h:selectOneListbox> 
</h:panelGroup> 

<h:panelGroup layout="block" id="loadMenu"> 
    <h:panelGroup rendered="#{articles.selectedMenu=='0'}"> 
     MENU 0 
    </h:panelGroup> 

    <h:panelGroup rendered="#{articles.selectedMenu=='1'}"> 
     MENU 1 
    </h:panelGroup> 

    <h:panelGroup rendered="#{articles.selectedMenu=='2'}"> 
     MENU 2 
    </h:panelGroup> 
</h:panelGroup>  

答えて

3

あなたはこれを達成するためにJSF 2に組み込まれAJAXサポートを使用することができます。これを行うには、h:selectOneListboxタグにf:ajaxタグを入れ子にします。 F:AJAXタグは次のようになります。

<f:ajax render="loadMenu" execute="@this" /> 

これはあなたのリストボックスで変更された値を処理し、panelGroupを再レンダリングする必要があります。

さらなる詳細については、以下を参照してください。 http://mkblog.exadel.com/2010/04/learning-jsf-2-ajax-in-jsf-using-fajax-tag/

+0

はい、これがすべき作品を。しかし、私は集中要素を変更するときにこれを行う必要があります。 "do on onchange"のように:) – markzzz

+1

'event =" change "'を追加します。しかし、すでに 'h:selectOneMenu'のデフォルトイベントです。とにかく試しましたか?ブライアンによって提案されたように、ちょうどこのラインは十分であるはずです。 – BalusC

+1

BalusCが指摘するように、ajaxイベントが発生するイベント属性を指定できます。イベントはDOMイベントです。リストボックスのデフォルトのイベントは「変更」です。詳細は、JSF2 APIを参照してください。http://download.oracle.com/docs/cd/E17802_01/j2ee/javaee/javaserverfaces/2.0/docs/pdldocs/facelets/f/ajax.html –

関連する問題