如何从<h:selectonemenu>获得价值?</h:selectonemenu>

时间:2012-05-14 13:25:08

标签: jsf selectonemenu

我想从中获取价值。我尝试了这段代码,但它不起作用:

<h:form>
        <h:outputLabel value="départements : "/>
        <h:selectOneMenu value="#{departementController.selected.id}" onchange="submit()" immediate="true">
            <f:valueChangeListener type="Controller.Listener.DepartementValueListener"/>
            <f:selectItems value="#{departementController.itemsAvailableSelectOne}"/>
        </h:selectOneMenu>

        <h:outputLabel value="nouvelle valeur : "/>

        <h:inputText value="#{departementController.comboBox}" id="dep"/>
    </h:form>

控制器:

 //departement change listener
private String comboBox;

public String getComboBox() {
    return comboBox;
}

public void setComboBox(String comboBox) {
    this.comboBox = comboBox;
}

public void departementChangeListener(ValueChangeEvent e) {
    // Skip validation of non-immediate components and invocation of the submit() method.
    FacesContext.getCurrentInstance().renderResponse();
    this.comboBox = e.getNewValue().toString();}

sourceId = j_idt7:j_idt9 [severity =(ERROR 2),summary =(j_idt7:j_idt9:erreur de validation.La valeur est incorrecte。),detail =(j_idt7:j_idt9:erreur de validation.La valeur est incorrecte。 )]

1 个答案:

答案 0 :(得分:4)

你毕竟遇到了两个问题。

首先,错误“erreur de validation.La valeur est incorrecte”这是法语翻译“验证错误:值无效”表示提交值不equals() <f:selectItems>中的任何一个可用项。您的代码不够完整,无法指出根本原因,但我猜测List<Department>中有<f:selectItems value>,因此每个项目都是Department ,但您尝试将其设置为String id而不是Department。这个不对。您需要在DepartmentString之间提供转换,然后使用#{departementController.selected}

这样的事情:

<h:selectOneMenu value="#{bean.selectedDepartment}">
    <f:selectItems value="#{bean.availableDepartments}" />
</h:selectOneMenu>

private Department selectedDepartment;
private List<Department> availableDepartments;

@FacesConverter可在Department及其唯一String表示之间进行转换。

您的第二个问题是,您似乎过于关注JSF 1.x目标示例,以便在更改下拉列表时填充另一个字段。你正在使用一个相当笨拙/ hacky的JSF 1.x解决方法。在JSF 2.x中,您只需使用<f:ajax>即可。

<h:selectOneMenu value="#{bean.selectedDepartment}">
    <f:selectItems value="#{bean.availableDepartments}" />
    <f:ajax listener="#{bean.changeDepartment}" render="inputId" />
</h:selectOneMenu>
<h:inputText id="inputId" value="#{bean.input}" />

public void changeDepartment() {
    input = selectedDepartment.getId();
}

另见: