单击commandbutton时验证表单中的操作

时间:2013-10-24 14:02:04

标签: jsf jsf-2 primefaces

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

我有一个表单,其中有两个字段可以输入日期值,因此当用户按下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>

我的代码在上面。

1 个答案:

答案 0 :(得分: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的action方法。和heance选项卡无法打开。