0

我想知道是否可以在执行操作以在导航器中打开新选项卡之前验证日期。

我有一个表单,它有两个字段来输入日期值,所以当用户按下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 回答