2011-06-22 16 views
2

私は、このコンポーネントがあります。選択した日付が特定の日付の前にある場合は、豊富な:カレンダーを検証する方法はありますか?

<rich:calendar enableManualInput="true" value="#{home.born}" datePattern="dd/MM/yyyy" /> 

をし、私が選択した日付が等しいかmommentでの実際の日付より前にあるかどうかを検証する必要があります... は金持ちだけでそれを行う方法があります:カレンダーや私がしなければなりませんそれを家に確認する?

問題が解決しました。私はBaluscによって提供されたソリューションを使用しました。 ありがとうございました! :)

答えて

9

サーバー側でそれを検証するために、あなたはValidatorを使用することができます。

@FacesValidator("notAfterToday") 
public class NotAfterTodayValidator implements Validator { 

    @Override 
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException { 
     Date date = (Date) value; 
     Date today = new Date(); 

     if (date.after(today)) { 
      String message = "Date may not be later than today."; 
      throw new ValidatorException(new FacesMessage(message)); 
     } 
    } 

} 
+0

<rich:calendar ...> <f:validator validatorId="notAfterToday" /> </rich:calendar> 

カレンダーアイコンを使用して日付を選択する場合にのみ、クライアント側の検証を行います。日付を入力すると、クライアント側の検証がバイパスされます。 –

4

あなたはJavaScriptを使ってそれを行うことができるはずです(クライアント側もそうです)。 Client API docを見ると、rich:カレンダーコンポーネントによって提供されるgetCurrentDate() JavaScript関数があることがわかります。

JavaScriptのondateselectedoninputchangeのJavaScript関数を起動して、getCurrentDate()メソッドを使用し、現在の日付と比較する必要があります。そのような

何か(私はテストしていない):

<h:form id="myForm"> 
    ... 
    <rich:calendar id="myCalendar" enableManualInput="true" value="#{home.born}" datePattern="dd/MM/yyyy" 
     ondateselected="checkDate();" oninputchange="checkDate();"/> 
    ... 

<script type="text/javascript"> 
function checkDate() { 
    var choosenDate = $("myForm:myCalendar").component.getCurrentDate(); 
    var now = new Date(); 
    // Calculate the difference between the 2 dates. 
    // This method may be modified if you want to only compare date (i.e. not time). 
    var diff = choosenDate.getTime() - now.getTime(); 
    if (diff < 0) { 
     // choosenDate is before today 
     alert("Error in the selected date!"); 
     // Do what you want here... 
    } 
} 
</script> 
関連する問題