set命令在DefaultMenuItem不起作用

问题描述:

我有一个问题,在一个p:megaMenu一个DefaultMenuItem使用setCommand()set命令在DefaultMenuItem不起作用

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

我的豆:

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> 
+0

后联代码,不通过链接,当然不是在图像中。请在开始新句子时使用大写字母,并且我(i)的大写字母为I.并且您的bean代码不是bean,而是代码snipptes。请阅读[问]和http://www.*.com/tags/jsf/info和[mcve] – Kukeltje

+0

我试图更新我的问题,谢谢。 – Tyma

+0

也许这将有助于:http://*.com/questions/18741731/primefaces-4-dynamic-menu-setcommand-method –

我有确切同样的问题。我通过不结合setCommand和setUrl来实现它。当我使用setUrl时,setCommand不会被触发,但是其他的一切都会被执行。这是不是从primefaces用户指南明确...

你可以做的是使用的方法在你命令retun要重定向像这样的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" 
}