Jsf 2 JSF2 SelectOneMenu更新其他SelectOneMenu

Jsf 2 JSF2 SelectOneMenu更新其他SelectOneMenu,jsf-2,primefaces,managed-bean,treenode,Jsf 2,Primefaces,Managed Bean,Treenode,当我选择第一个SelectOnMenu中的任何项目时,我想更新第二个SelectOneMenu。因此,我有两个SelectOneMenu: <p:outputLabel value="Table :" /> <p:selectOneMenu id="tbName"> <f:selectItem itemLabel="Select

当我选择第一个SelectOnMenu中的任何项目时,我想更新第二个SelectOneMenu。因此,我有两个SelectOneMenu:

     <p:outputLabel value="Table :" />
                   <p:selectOneMenu  id="tbName">
                                            <f:selectItem itemLabel="Select Table" itemValue="" />
                                            <f:selectItems value="#{infoTable.nameTa}" />

                                        </p:selectOneMenu> 
<p:outputLabel value="Foreignenkey :" />

               <p:selectOneMenu  id="cat">
                                        <f:selectItem itemLabel="Select Column" itemValue="" />
                                        <f:selectItems value="#{infoTable.fkName}" />

                                    </p:selectOneMenu> 

这是他的Java代码:

public List<SelectItem> getNameTa() {
        List<SelectItem> subcat = new ArrayList<SelectItem>();
        try {
            ConnectionBase con = new ConnectionBase();
            TableInfo tt = new TableInfo();

            List<String> rs = tt.getTable(con, "%");
            Iterator i = rs.iterator();
            while (i.hasNext()) {
                subcat.add(new SelectItem(i.next()));
            }

        } catch (Exception e) {
            e.getStackTrace();
        }

        return subcat;

    }
public List<SelectItem> getFkName() {
        List<SelectItem> subcat = new ArrayList<SelectItem>();
        // if (catname != null && !catname.equals("")) {
        try {
            // Connection con = Database.getConnection();
            ConnectionBase con = new ConnectionBase();
            TableInfo tt = new TableInfo();

            List<String> rs = tt.getNameCtable(con, "%");


            Iterator i = rs.iterator();
            while (i.hasNext()) {
                subcat.add(new SelectItem(i.next()));
            }

        } catch (Exception ex) {
        }
        // }
        return subcat;
    }
public List getNameTa(){
List subcat=new ArrayList();
试一试{
ConnectionBase con=新的ConnectionBase();
TableInfo tt=新的TableInfo();
列表rs=tt.getTable(con,“%”);
迭代器i=rs.Iterator();
while(i.hasNext()){
子目录添加(新建SelectItem(i.next());
}
}捕获(例外e){
e、 getStackTrace();
}
返回子类别;
}
公共列表getFkName(){
List subcat=new ArrayList();
//if(catname!=null&&!catname.equals(“”){
试一试{
//Connection con=Database.getConnection();
ConnectionBase con=新的ConnectionBase();
TableInfo tt=新的TableInfo();
列表rs=tt.getNameCtable(con,“%”);
迭代器i=rs.Iterator();
while(i.hasNext()){
子目录添加(新建SelectItem(i.next());
}
}捕获(例外情况除外){
}
// }
返回子类别;
}

正如我所知,我应该创建一个EventListner,但我不知道如何以及何时从第一个selectonemenu获取表名,如何将名称发送到第二个methode“getFkName”?

将所选值存储在bean实例变量中,并在该值更改时使用ajax event listner更新第二个p:selectonemenu

<p:selectOneMenu id="tbName" value="#{infoTable.selectedTableName}">
  <p:ajax event="onchange" update="cat">
  <f:selectItem itemLabel="Select Table" itemValue="" />
  <f:selectItems value="#{infoTable.nameTa}" />
</p:selectOneMenu>

在getFkName()中,可以使用selectedTableName变量获取当前选定值。
还有,别忘了为selectedTableName提供get/set方法。

您看过我们的吗?有一章详细解释了这一点。bu如何将nameTable的结果提供给第二个方法getFkName()?