2016-03-08 71 views
1

我有一個問題,在一個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.stackoverflow.com/tags/jsf/info和[mcve] – Kukeltje

+0

我試圖更新我的問題,謝謝。 – Tyma

+0

也許這將有助於:http://stackoverflow.com/questions/18741731/primefaces-4-dynamic-menu-setcommand-method –

回答

0

我有確切同樣的問題。我通過不結合setCommand和setUrl來實現它。當我使用setUrl時,setCommand不會被觸發,但是其他的一切都會被執行。這是不是從primefaces用戶指南明確...

0

你可以做的是使用的方法在你命令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" 
}