1

私は困惑しています。カスタムバリデータを追加した xpage に入力フィールドがあります。何を試してもカスタムバリデーターを起動できません。期待どおりに機能する validateRequired もあります。エラー メッセージは「Display Error」コントロールに送信され、クライアント側の検証は無効になります。カスタム バリデータの目的は、有効な日付が入力されているかどうかを確認することです。動作するようになったら、有効な曜日のチェックなど、他の複雑な検証も追加する予定です。

「inside true」が有効な日付をコンソールに表示し、「inside false」が無効な日付を表示するように、print ステートメントは正しく機能します。if ステートメントの後に test print ステートメントを追加すると、思ったように実行されません。どちらの条件でも、メッセージは表示されず、ページは送信されます。

getValue() と getSubmittedValue の両方を使用してみました。また、facesMessage と文字列を返そうとしました。私はまた、これを行うためのより良い方法に対して非常にオープンです。

<xp:inputText id="datepicker" styleClass="datepicker" 
value="#{viewScope.arrivalDate}" 
defaultValue="#{javascript:statusBean.arrivalDate}"
disableClientSideValidation="true">
      <xp:this.validators>
        <xp:validateRequired message="Please enter the arrival date">
        </xp:validateRequired>
        <xp:customValidator message="err" loaded="true">
            <xp:this.validate><![CDATA[#{javascript:var datepicker = getComponent("datepicker").getSubmittedValue();
            var testDate = @IsTime(@TextToTime(datepicker));
            print("testDate=" + testDate);
            if(testDate == 0){
             print("inside false");
             return false;
        } else if(testDate == 1){
             print("inside true");
             return true;
            }}]]>
           </xp:this.validate>
        </xp:customValidator>
     </xp:this.validators>
4

3 に答える 3

3

カスタム バリデーターはまだ試していませんが、昨年の LUG でのサンプル デモ用にバリデーター プロパティに入れた SSJS を次に示します。

<xp:this.validator>
<![CDATA[#{javascript:var sv = this.getSubmittedValue();
print ("Checking submitted value for input1 '" + sv + "' is more than 5 characters");
print ("Value for input1 is " + this.getValue());
if (sv.length < 5) {
    var msgStr = "You must enter your FULL name, which will be more than 5 characters!";
    var msgObj = new javax.faces.application.FacesMessage(javax.faces.application.FacesMessage.SEVERITY_ERROR, msgStr, msgStr);
    facesContext.addMessage(getClientId(this.getId()), msgObj);
    this.setValid(false);
}}]]>
</xp:this.validator>

これにより、facesMessage が追加され、コンポーネントの有効なプロパティが false に設定されることに注意してください。

于 2013-06-07T15:46:54.010 に答える
3

customValidator は、true または false ではなく、エラー メッセージを含む文字列を返す必要があります。

したがって、あなたの場合、代わりにこれを行います:

<xp:customValidator message="err" loaded="true">
    <xp:this.validate><![CDATA[#{javascript:
        var datepicker = getComponent("datepicker").getSubmittedValue();
        var testDate = @IsTime(@TextToTime(datepicker));
        print("testDate=" + testDate);
        if(testDate == 0){
            print("inside false");
            return "Invalid date";
        }
    }]]></xp:this.validate>
</xp:customValidator>
于 2013-06-07T05:12:41.933 に答える
1

xSnippet - postValidationError を使用した私のバージョンは次のとおりです。

<xp:customValidator>
    <xp:this.validate><![CDATA[#{javascript:
        if (@IsTime(@TextToTime(@Trim(value))) == 0){
          postValidationError(this, "Please enter a valid Date/Time")
        } 
    }]]></xp:this.validate>
</xp:customValidator>
于 2013-06-07T16:28:31.280 に答える