5

ユーザーがアクションを実行する前に、フォーム内の 2 つの日付を検証したいと考えています。だから私はap:calendar内でaf:validatorを取得しました。問題はf:attributeにあります。パラメータとして開始日を渡していますが、バリデータはこの日付を受け取りません。ただし、アクション ボタンを押すと、日付パラメーターが検証されます。この投稿をガイドとして使用しています。私のxhtmlは:

    <p:column >
                        <p:calendar  id="txtStartDate" binding="#{txtStartDate}"
                            pattern="dd/MM/yyyy"
                            value="#{myBean.bean.startDate}">                               
                        </p:calendar>
                    </p:column>
                    <p:column>
                        <p:calendar id="txtEndDate"
                            pattern="dd/MM/yyyy"
                            value="#{myBean.bean.endDate}">
                            <f:validator validatorId="validator.dateRangeValidator" />
                            <f:attribute name="fromDate" value="#{txtStartDate.value}" />                                
                            <p:ajax event="dateSelect" execute="@Form" update=":formHeader:messages" />
                        </p:calendar>
                    </p:column>

そしてバリデーター:

@Override
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
    if (value == null || component.getAttributes().get("fromDate") == null) return;

    Date endDate   = (Date) value; 
    Date startDate = (Date) component.getAttributes().get("fromDate");

    if (!endDate.after(startDate)) {
        FacesMessage message = new FacesMessage("End date before the start date.");
        message.setSeverity(FacesMessage.SEVERITY_ERROR);
        addMessageOnSession(FacesMessage.SEVERITY_ERROR, "Invalid dates");
        throw new ValidatorException(message);
    }
}

それについての助けに感謝します。

4

3 に答える 3

1

ここにはいくつかの問題があります。

execute="@Form"

上記は正しくありません。フォーム全体を実行したい場合、ここでの正しい値は@form.

これを修正すると、txtStartDateコンポーネントはバインディング値を更新し、 の属性として設定できるようになりますtxtEndDate

于 2013-02-15T14:26:12.380 に答える
0

とにかく、私の簡単な解決策は ajax タグに listener="" を追加することだったので、Bean で検証を行っています。これがこれを行うための最良の方法であるかどうかはわかりませんが、私の問題を解決してください。

于 2013-02-19T12:32:30.680 に答える