10

私はprimefaces 4を試していますが、新しいMenuModel. ここでは、Optimus Primeが新しいメニュー システムについて少し例を挙げて書いています。 http://blog.primefaces.org/?p=2594

この時点で、彼はsetCommand方法について次のように書いています。

set コマンド

これはsaveメソッドを指しています (pf4 ショーケースにあります: http://www.primefaces.org/showcase/ui/menu/menu.xhtml ):

保存方法

この紹介の後、ここに質問/問題があります。Bean から動的メニューを作成していますが、ユーザーがクリックしたメニューを認識して正しい操作を行う方法がわかりません。

public void init() {
        if (spBean == null) {
            System.out.println("spBean is NULL!");
            return;
        }
        for (ServiceProvider sp: spBean.getListaSP()) {
            DefaultMenuItem item = new DefaultMenuItem(sp.getNome());
            //item.setUrl("#");
            item.setIcon("images/sps/" + sp.getImageId() + ".png");
            item.setCommand("#{dockMenuBackingBean.setNewMenu}");
            //
            model.addElement(item);
            System.out.println(sp.getNome());
        }
    }

    public void setNewMenu() {
        System.out.println("A menu was clicked BUT witch menu? Arghh!!");
        //
    }

私がやりたいことは、PF3.5 で行ったようにspSelectedinを変更することです。ServiceProviderBackingBean

<p:dock>
    <c:forEach items="#{serviceProvidersBean.sps}" var="sp">
        <p:menuitem 
            value="#{sp.spInstanceName}" 
            icon="/images/sps/#{sp.spInstanceId}.png" 
            update=":form:spDetail" >
            <f:setPropertyActionListener 
                value="#{sp}"   
                target="#{serviceProvidersBean.spSelected}" />
        </p:menuitem>
    </c:forEach>
</p:dock>

何か助けはありますか?

編集:

実際に私はこれを行っていますが、これを達成するためのより良い、よりクリーンな方法を探しています。

public void init() {
    if (spBean == null) {
        System.out.println("spBean is NULL!");
        return;
    }
    for (ServiceProvider sp: spBean.getListaSP()) {
        DefaultMenuItem item = new DefaultMenuItem(sp.getNome());
        //item.setUrl("#");
        item.setIcon("images/sps/" + sp.getImageId() + ".png");
        String command = String.format("#{dockMenuBackingBean.setNewMenu('%d')}", spBean.getListaSP().indexOf(sp));
        item.setCommand(command);
        //
        model.addElement(item);
        System.out.println(sp.getNome());
    }
}

public void setNewMenu(Object x) {
    Integer selectedId = Integer.parseInt((String)x);
    System.out.println("Menu changed " + Integer.toString(selectedId));
    //
}
4

2 に答える 2

11

ここでオプティマス、setParam(key,value) を使用します。ただし、これにはトランクコードを更新する必要があります。

于 2013-09-12T07:46:07.983 に答える