【问题标题】:How to display errors in jsp using spring mvc如何使用spring mvc在jsp中显示错误
【发布时间】:2012-05-17 23:22:06
【问题描述】:

我无法在 jsp 页面中收到错误消息。实际上,我试图检查数据库中的用户名和密码是否正确。我从 dao 抛出数据异常并在控制器处捕获,检查以下代码

SimpleFormController

public ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response,Object command,BindException errors) throws Exception {

        log.info("onSubmit handleRequest method"+request.getParameter("username"));
        boolean isError=false;
        String username="",password="",errMessage="";
        username=request.getParameter("username");
        password=request.getParameter("password");

        UserBean ubean=null;
        try{
             ubean=userservice.chkUsername(username,password);
        }catch(DataException ex){

            errMessage=ex.getMessage();
            isError=true;
            //throw ex;
        }
        if(isError==true){
            System.out.println("errMessage handleRequest method"+errMessage);
            errors.reject(errMessage);
            return showForm(request, response, errors);
        }
        log.info("After shownform method called");
        HttpSession session=request.getSession(true);
        session.setAttribute("User",ubean);
        return  new ModelAndView("UserPage");
        }



public ModelAndView showForm(HttpServletRequest request, HttpServletResponse response,BindException errors) throws Exception {
                 //Displaying Count size
    log.info("Show form Error Count"+errors.getErrorCount()+getFormView());
    return new ModelAndView(getFormView());
}

我试图在jsp页面中以两种方式显示,即,

Jsp 页面:-

1)
                <spring:hasBindErrors name="UserBean">
                     <h3>You have errors in your input!</h3>  
    <font color="red">  
                    <c:forEach items="${errors.allErrors}" var="error">  
     <spring:message code="${error.code}" text="${error.defaultMessage}"/>  
    </c:forEach>  
    </font>  
                   </spring:hasBindErrors>
2) <form:form action="userpage.htm" method="post"  onsubmit="javascript:fun()">
                    <tr>
                     <form:errors path="*"/> 
                      --------
                       --------
  </form:form>

我试图在jsp中显示以上两种方式。但最后我没有得到任何东西。上面的代码有什么问题吗。请帮助我

【问题讨论】:

    标签: spring-mvc


    【解决方案1】:

    您是否尝试过使用 BindingResult.hasError()? 并指定要在哪个字段上显示错误。

    还要确保您使用的错误代码存在于您的 proerpty 文件中。

    如果您使用 ModelAttribute 将模型绑定到您的视图,那么处理 jsp 中的错误会容易得多。如果你愿意,我可以在这里放一些代码。

    干杯。

    【讨论】:

      【解决方案2】:

      我用来形成验证的方法如下:

      将“验证器”属性添加到您的控制器:

      <bean class="YourController">
          ...
          <!-- Map a validator -->
          <property name="validator">
              <bean class="CustomerValidator" />
          </property>
          ...
       </bean>
      

      创建实现org.springframework.validation.Validator的类,实现两个方法:supports和validate:

      public class CustomerValidator implements Validator{
      
      
         @Override
         public boolean supports(Class clazz) {
      
         }
      
         @Override
         public void validate(Object target, Errors errors) {
      
         }
      }
      

      我会从控制器类的主体中消除验证逻辑。

      看看下面的例子,相信你会觉得很有用:Spring MVC form handling example

      【讨论】:

      • 我正在使用数据库表检查数据然后我抛出了异常,即无效的用户名/密码。但是如果我使用验证器,它在表单提交和对象的数据库命中之前工作。是对的?
      • 在我看来,您应该将您的 dao 注入您的验证器并在您的自定义验证器中实现所有逻辑。引自 link 的引述:“你的验证器只是 spring bean,对,所以它们可以被注入处理数据访问的服务对象。你可以让你的验证器从数据库中获取数据,而不会影响设计。”跨度>
      猜你喜欢
      • 2017-01-16
      • 1970-01-01
      • 2013-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      • 2011-08-13
      • 2017-10-25
      相关资源
      最近更新 更多