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>
答
我有确切同样的问题。我通过不结合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"
}
后联代码,不通过链接,当然不是在图像中。请在开始新句子时使用大写字母,并且我(i)的大写字母为I.并且您的bean代码不是bean,而是代码snipptes。请阅读[问]和http://www.*.com/tags/jsf/info和[mcve] – Kukeltje
我试图更新我的问题,谢谢。 – Tyma
也许这将有助于:http://*.com/questions/18741731/primefaces-4-dynamic-menu-setcommand-method –