12

編集ページへの単純な JSF 入力フォームと、値の重複をチェックする Validator があります。

<td>Name</td>
<td>
    <h:outputText value="#{ud.name}"
                  rendered="#{not DCProfileTabGeneralController.editable}" />
    <h:inputText id="dcname" value="#{ud.name}" rendered="#{DCProfileTabGeneralController.editable}"
                 validator="#{ValidatorDatacenterController.validateDatacenterName}" autocomplete="off">
        <f:ajax event="blur" render="dcnamevalidator" />
    </h:inputText>
    <h:message id="dcnamevalidator" for="dcname" />
</td>

public void validateDatacenterName(FacesContext context, UIComponent component, Object value){
....
}

検証プロセスで使用される 2 番目の値を送信する方法はありますか?

4

2 に答える 2

25

<f:attribute>頭に浮かぶ。入力テキストに 1 つ追加し、バリデーターで取得します。

<h:inputText id="dcname".....
<f:attribute name="param" value="myparam" /> 
</h:inputText>

と:

String param = (String) component.getAttributes().get("param"); 

ELから値を取得できます。幸運を

于 2013-02-04T21:19:22.563 に答える
2

postValidate イベントを追加して、次のように複数のフィールドを検証できます。

<f:event listener="#{bean.validationMethod}" type="postValidate" />

これはモデルの更新前に起動し、別のコンポーネントの新しい値を取得できます

FacesContext fc = FacesContext.getCurrentInstance(); 
UIComponent components = event.getComponent();
UIInput param1 = (UIInput) components.findComponent("param1");
UIInput param2 = (UIInput) components.findComponent("param2");

検証が失敗した場合は、FacesContext renderResponse メソッドを呼び出して、モデルの更新をスキップします。

于 2013-02-04T22:26:59.730 に答える