DefaultMenuItem上的setCommand不起作用

时间:2016-03-08 14:41:06

标签: jsf primefaces

我在setCommand()的DefaultMenuItem上使用p:megaMenu时遇到问题。

我希望当我点击buttonTables.jsf中的某个项目时,函数afficherTable()将被执行并将我重定向到affichageTable.jsf。问题是当我运行项目我的megaMenu填充时,当我点击一个项目时,它会将我重定向到另一个页面,但afficherTable()中传递的功能setCommand不会运行。所以我在另一页的数据表是空的。在日食的控制台中,我没有任何错误。谢谢。

我的豆子:

public class MonBean implements Serializable{

    private static final long serialVersionUID = -5773011533863117274L;
    private GestionTableImpl gestionTable;
    private Table table;
    private List<Colonne> columns;
    private  DefaultMenuModel megaModel;

    public void afficherTable(ActionEvent event){
        MenuItem menuItem = ((MenuActionEvent) event).getMenuItem();
        String nTable = menuItem.getParams().get("tableNom").get(0);
        gestionTable=new GestionTableImpl();
        columns=new  ArrayList<Colonne>();
        columns=gestionTable.afficherTable(nTable);
    }

    public  DefaultMenuModel listTablesMenu() {
        gestionTable=new GestionTableImpl();
        List<Table> mesTables=gestionTable.getTables();
        megaModel = new DefaultMenuModel();
        DefaultSubMenu firstSubmenu = new DefaultSubMenu("Tables");

        for(int i=0;i< mesTables.size();i++){
            String tableNom=mesTables.get(i).getNomTable();
            DefaultMenuItem item= new DefaultMenuItem(tableNom);
            item.setUrl("//AffichageTable.jsf");
            item.setIcon("ui-icon-document-b");
            item.setParam("tableNom",item.getValue());
            item.setCommand("#{monBean.afficherTable}");
            firstSubmenu.addElement(item);  
            megaModel.addElement(firstSubmenu);
        }

        return megaModel;
    }

    //getters and setters   
    public static long getSerialversionuid() {
        return serialVersionUID;
    }
    public void setModel(DynaFormModel model) {
        this.model = model;
    }
    public Table getTable() {
        return table;
    }
    public void setTable(Table table) {
        this.table = table;
    }
    public List<Colonne> getColumns() {
        return columns;
    }
    public void setColumns(List<Colonne> columns) {
        this.columns = columns;
    }
    public GestionTableImpl getGestionTable() {
        return gestionTable;
    }
    public void setGestionTable(GestionTableImpl gestionTable) {
        this.gestionTable = gestionTable;
    }
    public DefaultMenuModel getMegaModel() {
        return megaModel;
    }
    public void setMegaModel(DefaultMenuModel megaModel) {
        this.megaModel = megaModel;
    }
}

这是buttonTables.jsf

<body>
    <p:megaMenu autoDisplay="false" styleClass="menu-bar" style="">
        <p:submenu label="Maintenance Services" icon="ui-icon-check">
            <p:column>
            <p:scrollPanel style="height:200px;width:250px" mode="native">
                <p:menu model="#{monBean.listTablesMenu()}" />
                    </p:scrollPanel>            
            </p:column>
        </p:submenu>
    </p:megaMenu>
</body>

这是AffichageTable.jsf

<h:form>
    <p:outputLabel value="#{monBean.table.nomTable}"/>
        <p:dataTable id="tbl" var="col" value="#{monBean.columns}"
            paginator="true" rows="5" style="margin-bottom:20px">
            <p:column>
                <f:facet name="header">
                    <h:outputText value="Nom colonne" />
                </f:facet>
                <h:outputText value="#{col.nomColonne}" />
            </p:column>
            <p:column>
                <f:facet name="header">
                    <h:outputText value="Type colonne" />
                </f:facet>
                <h:outputText value="#{col.typeColonne}" />
            </p:column>
            <p:column>
                <f:facet name="header">
                    <h:outputText />
                </f:facet>
                <p:commandButton icon="ui-icon-pencil" />
                <p:commandButton icon="ui-icon-trash" />
            </p:column>
        </p:dataTable>
    </h:form>

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。我通过不组合setCommand和setUrl使它工作。当我使用setUrl时,不会触发setCommand,但会执行其他所有操作。从primefaces用户指南中可以看出这一点......

答案 1 :(得分:0)

你可以做的是使用你命令中的方法来重新调整你要重定向的xhtml:

public String afficherTable(){
    MenuItem menuItem = ((MenuActionEvent) event).getMenuItem();
    String nTable = menuItem.getParams().get("tableNom").get(0);
    gestionTable=new GestionTableImpl();
    columns=new  ArrayList<Colonne>();
    columns=gestionTable.afficherTable(nTable);
    return "/AffichageTable.jsf"
}