【问题标题】:Form getting submitted even A4j validation fails +jsf即使 A4j 验证失败 +jsf 也提交表单
【发布时间】:2010-10-19 13:42:07
【问题描述】:

我正在使用 a4j 检查用户名是否存在于 onblur 事件 当用户已经存在时它会显示错误消息但是,如果我点击 显示提交的错误消息后提交按钮 当涉及 inputtext 的 required=true 时,它​​不会被提交

required="true" 验证器="#{RegistrationBean.checkFirstName}">

public void checkFirstName(FacesContext facesContext, UIComponent 组件, 对象值)
{

    String name = (String) value;

     if(name.trim().length()==0){
         System.out.println("Name *******");

         String message = bundle.getString("Name_Required");
        FacesContext.getCurrentInstance().addMessage("Reg:firstName",
                new FacesMessage(FacesMessage.SEVERITY_ERROR, message,message));                


     }                  
     if(name.trim().equalsIgnoreCase("tom")){

         String message = bundle.getString("Name_exists");
        FacesContext.getCurrentInstance().addMessage("Reg:firstName",
                new FacesMessage(FacesMessage.SEVERITY_ERROR, message,message));                

    }

  }

谁能告诉我哪里出错了

【问题讨论】:

    标签: jsf


    【解决方案1】:

    使用 JSF 代码,帮助您会更容易。因此,我建议您在 JSF 页面中添加类似的内容:

    <h:inputText id="firstName" ... validator="#{aBean.checkFirstName}">
    

    Java 代码的问题是发生错误时没有抛出任何 ValidatorException。因此,您的代码必须是:

    public void checkFirstName(FacesContext facesContext, UIComponent component, Object value) {
        String name = (String) value;
        if ((name == null) || name.trim().length() == 0) {
            System.out.println("Name *******");
            String message = bundle.getString("Name_Required");
            throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, message, message)); // Throw the required error
        }
        if (name.trim().equalsIgnoreCase("tom")) {
            String message = bundle.getString("Name_exists");
            throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, message, message)); // Throw the already exist error
        }
    }
    

    这样,如果这个字段填写的值为空或者已经存在,就会抛出ValidatorException,用户会得到一个错误信息(别忘了在你的表单中添加&lt;h:messages/&gt;或者&lt;h:message/&gt;组件),并且不会提交表单!

    【讨论】:

    • 如果您的问题解决了,请选择我的答案作为正确答案(如果是的话)(点击左侧0下方的图标)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 2020-01-31
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多