【问题标题】:Validate a action in form when click commandbutton单击命令按钮时验证表单中的操作
【发布时间】:2013-10-24 14:02:03
【问题描述】:

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

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

我的代码在上面。

【问题讨论】:

    标签: jsf jsf-2 primefaces


    【解决方案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>
    

    并在页面添加&lt;p:message/&gt;显示错误信息

    如果它们是验证错误,则不会调用 managedBean 的操作方法。和 heance 选项卡将不会打开。

    【讨论】:

    • 我要实现这段代码,但我有一个疑问,它会停止打开新标签吗?因为我的问题不仅在于验证,而且当我单击按钮时,它会调用带有寄存器的表单的新选项卡,但如果日期错误,它将在同一页面的新选项卡中打开。跨度>
    • @BholaVishwakarma....你不需要为&lt;p:commandButton明确实现Ajax标签,因为它已经用inbuilt ajax实现了
    • @BholaVishwakarma 我不认为你理解或者我不理解,但是如何使用此代码转到 page Apage B?昨天我遇到了无法测试您的代码的问题
    • 那么代码是测试您的有效日期,如果日期有效,您在命令按钮中编写的负责重定向的 actionlistener 将被执行:)
    猜你喜欢
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    • 2014-04-13
    • 2012-05-29
    • 1970-01-01
    • 2015-10-09
    相关资源
    最近更新 更多