1

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

<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 wronge.), detail=(j_idt7:j_idt9 : erreur de validation. La valeur est wronge.)]

4

1 回答 1

4

毕竟你有两个问题。

首先,错误“erreur de validation. La valeur estcorrecte”是“Validation Error: Value is not valid”的法语翻译,意思是提交的值不存在equals()任何一个可用的项目<f:selectItems>。您的代码不够完整,无法指出根本原因,但我您有一个List<Department><f:selectItems value>因此每个项目都是Department,但您试图将其设置为Stringid而不是 as Department。这个不对。您需要在 and 之间提供一个转换器,Department并改为String使用#{departementController.selected}

像这样的东西:

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

private Department selectedDepartment;
private List<Department> availableDepartments;

以及在其唯一表示@FacesConverter之间进行转换的 a 。DepartmentString

您的第二个问题是您似乎过于关注以 JSF 1.x 为目标的示例,而不是在更改下拉列表时填充另一个字段。您为此使用了一个相当笨拙/笨拙的 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();
}

也可以看看:

于 2012-05-14T13:48:41.463 回答