Primefaces,右键单击Menuitem ActionListener

时间:2013-11-11 03:13:38

标签: jsf primefaces xhtml actionlistener menuitem

我在这里有一些问题。我将非常感谢您的帮助。

我在primefaces中制作了一些动态多级菜单,我做到了。有父母,子菜单和菜单项。 我想通过上下文菜单为每个组件提供一些CRUD操作,因此我只需右键单击即可编辑每个级别的值/文本。

我使用名为MenussBean.java的bean创建菜单,您可以在下面看到它(只是对应的代码)。

public Submenu subMenus(Submenu parentMenus,String i, int id)
{
    if(i==""&&parentMenus==null)
    {
        subList = menusdao.getRootMenu();
        for(int a=0;a<subList.size();a++){
            parentMenus = new Submenu();
            parentMenus.setLabel(subList.get(a).getMenu());
            model.addSubmenu(parentMenus);
            i=subList.get(a).getMenu();
            subMen = null;
            id = a+1;
            subList2 = subKategori(id);
            for(Menus k:subList2){
                if(String.valueOf(parentMenus.getLabel().toString()).equals(i)){
                    subMen = new Submenu();
                    subMen.setId("_"+k.getId());
                    subMen.setLabel(k.getMenu());
                    parentMenus.getChildren().add(subMen);
                    subMenus(subMen,k.getMenu(),k.getId());
                }
            }
        }
    }else{

        subMen = null;
        subList2 = subKategori(id);
        for(Menus k:subList2){
            if(String.valueOf(parentMenus.getLabel().toString()).equals(i)){
                subList3=subKategori(k.getId());
                if(subList3.size()==0)
                {   
                    UIParameter uiParam = new UIParameter();
                    UIParameter menuParam = new UIParameter();
                    UIParameter idParentParam = new UIParameter();
                    uiParam.setName("idParam");
                    uiParam.setValue(k.getId());
                    menuParam.setName("menuParam");
                    menuParam.setValue(k.getMenu());
                    idParentParam.setName("idParentParam");
                    idParentParam.setValue(k.getId_parent());
                    MenuItem mi = new MenuItem();
                    mi.setId("_"+k.getId());
                    Application app = FacesContext.getCurrentInstance().getApplication();
                    MethodExpression methodExpr =  app.getExpressionFactory().createMethodExpression
                            (FacesContext.getCurrentInstance().getELContext(),  "#{menussBean.onItemClick}", null ,new Class[]{ javax.faces.event.ActionEvent.class});
                    mi.addActionListener(new MethodExpressionActionListener(methodExpr));
                    mi.setOncomplete("");
                    mi.setValue(k.getMenu());
                    mi.setTarget("_self");
                    mi.setTitle(k.getLink());
                    mi.setAjax(false);
                    mi.getChildren().add(uiParam);
                    mi.getChildren().add(menuParam);
                    mi.getChildren().add(idParentParam);
                    mi.setProcess("@all");
                    parentMenus.getChildren().add(mi);
                }
                else if (subList3.size()!=0)
                {
                    subMen = new Submenu();
                    subMen.setId("_"+k.getId());
                    subMen.setLabel(k.getMenu());
                    parentMenus.getChildren().add(subMen);
                    subMenus(subMen,k.getMenu(),k.getId());
                }
            }
        }
    }
    return parentMenus;
}


public List<Menus> subKategori(int i)
{
    arayList=new ArrayList<Menus>();
    for(Menus k:getList()){
        if(k.getId_parent()==i){
            arayList.add(k);
        }
    }
    return arayList;
}
public static List<Menus> getList() {
    return list;
}

这是价值获取方法:

  public void onItemClick() {
    FacesContext context = FacesContext.getCurrentInstance();
    idItem =      context.getExternalContext().getRequestParameterMap().get("idParam");
    menuItem = context.getExternalContext().getRequestParameterMap().get("menuParam");
    idParentItem = context.getExternalContext().getRequestParameterMap().get("idParentParam");
}

我想使用上下文菜单来提供CRUD操作,因此用户可以右键单击要编辑的组件。这是我的xhtml文件。

 <h:form>
<p:panelMenu id="panel" style="width:400px;font-size:12px"
        model="#{menussBean.model}" var="detail" selectionMode="single" ajax="true"
        widgetVar = "panelMen" styleClass="myMeineClass">

        </p:panelMenu>

    <p:contextMenu for="panel" style="font-size:12px">
        <p:menuitem value="View" icon="ui-icon-search"
            oncomplete="menuDialog.show()" update="display">
            <f:param name="id_barangbaru" value="#{detail}" />
            </p:menuitem>
        <p:menuitem value="Add" icon="ui-icon-plus" />
        <p:menuitem value="Edit" icon="ui-icon-pencil" />
        <p:menuitem value="Delete" icon="ui-icon-close" />
    </p:contextMenu>

    <p:dialog header="Menu Detail" widgetVar="menuDialog"
        resizable="false" width="200" showEffect="clip" hideEffect="fold"
        id="dialog" appendToBody="true" modal="true">

        <h:panelGrid id="display" columns="2" cellpadding="4" style="font-size:12px">

            <h:outputText value="ID:" />
            <h:outputText value="#{menussBean.idItem}"
                style="font-weight:bold" />

            <h:outputText value="Label:" />
            <h:outputText value="#{menussBean.menuItem}"
                style="font-weight:bold" />

            <h:outputText value="Parent:" />
            <h:outputText value="#{menussBean.idParentItem}"
                style="font-weight:bold" />
        </h:panelGrid>
    </p:dialog>
</h:form>

现在,我仍然在上下文菜单输出文本中获取值,但需要先左键单击。我需要直接传递值,只需右键单击。

那么,如何通过右键单击使用actionListener获取值?请帮忙......

我想要显示屏幕截图,但我是新来的,所以我没有任何声誉。

0 个答案:

没有答案