10

我正在尝试 primefaces 4,但没有新的MenuModel. 在这里,擎天柱用一个小例子写了关于新菜单系统的文章。 http://blog.primefaces.org/?p=2594

此时,他写了一个setCommand方法:

设置命令

这指向一个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!!");
        //
    }

我想做的是改变spSelectedin ServiceProviderBackingBean,就像我在 PF3.5 中所做的那样:

<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

14

通过 setParam(key,value) 设置命令参数可以这样完成:

在您的菜单生成 bean 中:

DefaultMenuItem item = new DefaultMenuItem("display list");
item.setId("listMenuItem");
item.setCommand("#{myBean.displayList}");
item.setParam("listId", 1l);

在包含操作的托管 bean 中:

public String displayList(ActionEvent event) {
    MenuItem menuItem = ((MenuActionEvent) event).getMenuItem();
    Long id = Long.parseLong(menuItem.getParams().get("listId").get(0));
    findListBy(id);
}

读取参数似乎有点复杂。但是 Primefaces 4 MenuItems 不支持 ActionListeners(因为它们不再从 UICommand 派生)所以参数似乎是新的新方法。

于 2014-01-16T14:42:52.033 回答
11

Optimus 在这里,使用 setParam(key,value)。您需要为此更新到中继代码。

于 2013-09-12T07:46:07.983 回答