【问题标题】:Best Approach to validate a bean验证 bean 的最佳方法
【发布时间】:2014-02-14 10:18:05
【问题描述】:

假设我有一个 bean,它有 10 个属性。 我也有一个错误对象,它具有三个属性,即。错误标志、errCd 和 errMsg 我想按顺序验证 bean 属性,我想在第一次出现错误时中断并填充错误对象。 我该怎么做,我想要最小的 If。 else if 语句。

ErrorObj 豆

public class ErrObj{
    private String errorMessage;
    private String errorCode;
    private boolean errorFlag;
    public String getErrorMessage() {
        return errorMessage;
    }
    public void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }
    public String getErrorCode() {
        return errorCode;
    }
    public void setErrorCode(String errorCode) {
        this.errorCode = errorCode;
    }
    public boolean isErrorFlag() {
        return errorFlag;
    }
    public void setErrorFlag(boolean errorFlag) {
        this.errorFlag = errorFlag;
    }   
}

下面是我验证 Bean 的类 假设,我使用 Custom util 类的一些静态方法返回布尔值,具体取决于字段是否有效。

 public class ValidateMyBean{

    ErrObj errObj = new ErrObj();
    if(!CustomUtils.isValid(myBean.getProp1))
    {
       // set some error conditions
       errObj.errorCode("123");
       errobj.setErrorMessage("validation 1 Failed");
    }
    else if(!CustomUtils.isValid(myBean.getProp2))
    {

    }
    ..........so on

    }

所以,如果我的 bean 有 10 个属性,并且我必须针对 3 个验证器方法验证每个属性,我不想编写多个“if - elseif”语句或编写多个 "if" 语句在每个 if 语句的末尾带有 return 语句,以防出现任何错误。 有没有更清洁的方法或有一些框架可以帮助我达到预期的结果? PS:这个Java应用使用的是Spring Core框架,是webservice应用,不是MVC应用。

【问题讨论】:

    标签: java validation javabeans bean-validation


    【解决方案1】:

    有很多验证工具。你可以看看这个例子:

    Spring MVC: How to perform validation?

    还有一个关于它的 jsr 规范:JSR-303

    http://beanvalidation.org/1.0/spec/

    享受

    【讨论】:

    • 它不是一个 MVC 应用程序。那么第一个链接是否适用?
    • JSR 是一种验证标准。不管是否是 MVC,jsr-303 的实现都是进行验证的标准方法。例如,hibernate 在另一个边界使用 jsr-303 兼容(左右)验证:docs.jboss.org/hibernate/stable/validator/reference/en-US/html/…。所以是的,第一个链接适用。它只是在预定边界处的通用 bean 验证机制,在示例情况下是在控制器绑定中,但它可以是任意的。如果您愿意,您也可以随时使用自定义代码编写类似的东西
    • 我真的推荐 bean 验证规范,但想补充一点,它们已经达到 1.1 版:beanvalidation.org/1.1
    • 谢谢,我是 JSR-303 的新手,但它看起来很有前途,我想学习,感谢您的指点和指导。
    【解决方案2】:

    使用 JSP 访问 Java Bean:

    用JSP写一个java bean程序变得更容易了。

    useBean 动作声明一个用于 JSP 的 JavaBean。一旦声明,bean 就成为一个脚本变量,脚本元素和 JSP 中使用的其他自定义标记都可以访问该变量。 useBean 标签的完整语法如下:

    <jsp:useBean id="bean's name" scope="bean's scope" typeSpec/>
    

    根据您的要求,范围属性的值可以是页面、请求、会话或应用程序。 id 属性的值可以是任何值,只要它在同一 JSP 中的其他 useBean 声明中是唯一名称即可。

    下面的例子展示了它的简单用法:

    <html>
    <head>
    <title>useBean Example</title>
    </head>
    <body>
    
    <jsp:useBean id="date" class="java.util.Date" /> 
    <p>The date/time is <%= date %>
    
    </body>
    </html>
    

    这将产生以下结果:

    日期/时间是 2010 年 9 月 30 日星期四 11:18:11 GST

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-06
      • 2011-06-03
      • 2016-02-03
      • 1970-01-01
      • 2011-03-08
      • 1970-01-01
      相关资源
      最近更新 更多