0

ナビゲーターで新しいタブを開くアクションを実行する前に、日付を検証できるかどうかを知りたいです。

日付の値を入力するための 2 つのフィールドを持つフォームがあるため、ユーザーが押すcommandButtonと、他のタブで値がフィルター処理された他のフォームが開きます。

問題は、正しく入力しなかった場合date、新しいタブが開くことです。

<p:column>
  <p:calendar locale="pt_BR" pattern="dd/MM/yyyy" value="#{relatorioDesempenhoAnalistaListBean.filter.dataInicial}" required="true" label="#{lbl['LABEL.RELATORIOANALISTA.ENTREDATAS']}"/>
</p:column>

<p:column>
  <p:calendar locale="pt_BR" pattern="dd/MM/yyyy" value="#{relatorioDesempenhoAnalistaListBean.filter.dataFinal}" required="true"  label="#{lbl['LABEL.RELATORIOANALISTA.ENTREDATAS']}"/>
</p:column>


<p:column colspan="3" styleClass="columnRight">
  <p:commandButton value="#{lbl['BOTAO.GERARRELATORIO']}" action="form" ajax="false" onclick="target='_blank'"/>
</p:column>

私のコードは上記です。

4

1 に答える 1

1

これに似たカスタム日付バリデーターを追加します

@FacesValidator(value="check_If_date_is_valid")
public class CheckDate implements Validator{

    @Override
    public void validate(FacesContext facescontext, UIComponent uicomponent,Object obj) throws ValidatorException {
         Date _userInput=(Date)obj;
            if(isThisDateValid(_userInput.toString(),"dd/MM/yyyy")){
               //do nothing 
            }else{
                  throw new ValidatorException(new FacesMessage("Date not valid"));
            }
     }

    public boolean isThisDateValid(String dateToValidate, String dateFromat){

    if(dateToValidate == null){
        return false;
    }

    SimpleDateFormat sdf = new SimpleDateFormat(dateFromat);
    sdf.setLenient(false);

    try {

        //if not valid, it will throw ParseException
        Date date = sdf.parse(dateToValidate);
        System.out.println(date);

    } catch (ParseException e) {

        e.printStackTrace();
        return false;
    }

    return true;
}

            

}

そしてそのページで

<p:commandButton>
  <f:validator validatorId="check_If_date_is_valid" />
  <f:ajax execute="@form" render="@form"/>
</p:commandButton>

そして<p:message/>、エラーメッセージを表示するページに追加します

検証エラーの場合、managedBean のアクション メソッドは呼び出されません。Heance タブが開きません。

于 2013-10-24T14:20:39.217 に答える