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:erreurde検証。

4

1 に答える 1

4

あなたは結局2つの問題を抱えています。

まず、「検証エラー:値が無効です」のフランス語訳であるエラー「erreurdevalidation。Lavaleur estincorrecte 」は、送信された値がで使用可能なアイテムのいずれでもないことを意味します。あなたのコードは根本的な原因を指摘するのに十分に完全ではありません、しかし私あなたがそこにいると思います、そしてそれですべてのアイテムはです、しかしあなたはそれをとしてではなくの値として設定しようとしています。これは正しくないです。との間にコンバータを供給し、代わりに使用する必要があります。equals()<f:selectItems>List<Department><f:selectItems value>DepartmentStringidDepartmentDepartmentString#{departementController.selected}

このようなもの:

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

private Department selectedDepartment;
private List<Department> availableDepartments;

そして、@FacesConverterとの間で変換するaDepartmentとそのユニークなString表現。

2番目の問題は、ドロップダウンの変更時に別のフィールドにデータを入力することに関して、JSF1.xを対象とした例に焦点を合わせすぎているように見えることです。そのために、かなり不器用でハッキーなJSF1.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 に答える