代码之家  ›  专栏  ›  技术社区  ›  Daniel Szalay

如果在另一个菜单中更改了值,如何更改SelectOneMenu中的列表?

  •  0
  • Daniel Szalay  · 技术社区  · 15 年前

    我想改变 SelectItem[] 第二个数组 SelectOneMenu ,如果第一个值发生更改。有可能吗?

    3 回复  |  直到 11 年前
        1
  •  2
  •   Daniel Szalay    11 年前

    我知道了,但我使用了RichFaces的Ajax功能,而不仅仅是JSF。只需将标签添加到我的第一个selectonemenu,它就可以工作了:)

    <a4j:support event="onchange" action="#{bean.onChange}"
                 reRender="otherSelectOneMenuID"/>
    

    无论如何,谢谢你的回应!

        2
  •  1
  •   user7094    15 年前

    如果将值更改侦听器绑定到第一个selectonemenu,则应该可以。

    从ValueChangeEvent获取新值并相应地更新列表。然后,JSF页面应该显示更新的列表。

    希望这有道理!

        3
  •  0
  •   Mithun Satheesh    12 年前

    我用的是A4J,它起作用了。

    <code>
    //JSF
    <h:outputLabel value="First selectOneMenu: "/>
    <h:selectOneMenu value="#{yourBackingBean.selectedItem}">
    <f:converter converterId="defaultConverter"/>
    <f:selectItem id="df01" itemLabel="Item01" itemValue="1" />
    <f:selectItem id="df02" itemLabel="Item02" itemValue="2" />
    <f:selectItem id="df03" itemLabel="Item03" itemValue="3" />
    <a4j:support event="onchange" reRender="secondSelectOneMenu"/> //secondSelectOneMenu is the id of the dropdown you want to change
    </h:selectOneMenu>
    
    
    <h:outputLabel value="Second selectOneMenu: "/>
    <h:selectOneMenu value="#{yourBackingBean.attributeToStoreSelectedValue}" id="secondSelectOneMenu">
    <f:converter converterId="defaultConverter"/>
    <f:selectItem id="df00" itemLabel="Select" itemValue="0" /> //Default value
    <f:selectItems value="#{yourBackingBean.returnByChoice}" />
    </h:selectOneMenu>
    
    
    //Converter
    
    public class DefaultConverter implements Converter {
    public Object getAsObject(FacesContext ctx, UIComponent component, String value) {
        return value;
    }
    
    public String getAsString(FacesContext ctx, UIComponent component, Object value) {
        String label = "";
        if (value != null) {
            label = value.toString();
        }
        return label;
    }
    }
    
    //Backing Bean Sample
    public List<SelectItem> returnByChoice() { //it must return a list of SelectItems so it can be displayed on the jsf page
       String id = (String) getSelectedItem(); //this is the value chosen from the first dropDownMenu wich selectedItem is the attribute onthe binding of the first dropDownMenu.
       ArrayList<SelectItem> arrItems = new ArrayList<SelectItem>();
       if (id != null) {
    
                List<YourClass> yourObjectList = yourDao.findAllItemsFromType(new Integer(id));
    
             Iterator<YourClass> iterator = yourObjectList.iterator();
             String tempName = "";
             String tempId = "";
             YourClass tempYourObject = null;
    
            while (iterator.hasNext()) {
               tempYourObject = iterator.next();
               tempId = String.valueOf(tempYourObject.getId());
               tempName = tempYourObject.getName();
               arrItems.add(new SelectItem(tempId, tempName));
            }
        }
        return arrProfiles;
    }
    </code>