其他分享
首页 > 其他分享> > Spring MVC表单:错误没有显示出来

Spring MVC表单:错误没有显示出来

作者:互联网

如果之前已经问过这个问题,请道歉.我希望有人可以介入并帮助我找出为什么我的表单验证错误没有显示出来.

我正在使用Spring 3.0.3和Hibernate,我正在使用jsr-303验证来验证我的表单输入.我有一个Spring控制器来处理GETting一个页面,其中包含一个在Spring的表单taglib的帮助下创建的表单.在此表单中,用户可以更改其名称并将其保存到数据库中.如果任何输入为空,则应再次显示带有表单的页面,并显示错误消息.同一个控制器处理页面的提交.似乎控制器在大多数方面都正常运行,但是当用户提交的表单中出现错误时,页面上不会显示任何错误.

这是什么形式:

<form:form commandName="changeNameCommand">
    <form:errors path="*" cssClass="errorBox" />

    <table width="100%" border="0" cellspacing="5" cellpadding="5" align="left">
      <tr>
    <td><b>First Name:</b></td>
    <td><form:input path="firstName" value="${user.firstName}" /></td>
  </tr>
  <tr>
    <td><b>Last Name:</b></td>
    <td> <form:input path="lastName" value="${user.lastName}" /></td>
  </tr>
</table>
</form:form>    

请注意,视图中有一个用户对象,用于使用用户的当前名字和姓氏填充表单.这工作正常.

控制器看起来像这样:

@Controller
@RequestMapping(value =  "/account/settings/change-name")
@SessionAttributes("changeNameCommand")
public class ChangeNameController {

    @ModelAttribute("changeNameCommand")
    public ChangeNameCommand getCommand() {
        return new ChangeNameCommand();
    }

    @RequestMapping(method = RequestMethod.GET)
    public ModelAndView getChangeNamePage(HttpServletRequest req) {
    ModelAndView mav = new ModelAndView("Account.ChangeName");
        mav.addObject("page_title", "Change Name");

        return mav;
    }

    @RequestMapping(method = RequestMethod.POST)
    public String doChangeName(
                @ModelAttribute("changeNameCommand") 
                    @Valid ChangeNameCommand command, 
                    BindingResult result, SessionStatus status) {

        if (result.hasErrors()) {
            return "redirect:/account/settings/change-name"; 
        }

    // Code here to persist updated user first and last name to database...        

        status.setComplete();

        return "redirect:/home";
    }
}

我正在使用Tiles 2.1.2来撰写页面,使用Urlrewrite 3.1.0来帮助形成友好的网址.

ChangeNameCommand类看起来像这样:

import org.hibernate.validator.constraints.NotEmpty;

public class ChangeNameCommand {

    @NotEmpty(message = "You must provide a first name.")
    private String firstName;

    @NotEmpty(message = "You must provide a last name.")
    private String lastName;

    @NotEmpty(message = "Your password is required to make changes.")
    private String currentPassword;

    // Getters and setters here...
}

在调试时,我看到当没有输入第一个或最后一个名字时,BindingResult实例确实包含错误.我关心的是出现错误时的重定向.我在这里看到其他问题,只返回视图名称而不是使用redirect:前缀.我试过,但(我认为)因为我使用Urlrewrite的方式和我的servlet映射设置方式Spring返回错误.我试过回来了

/account/settings/change-name
/web/account/settings/change-name
/mywebsite/web/account/settings/change-name

但无济于事. FWIW,这是我的servlet映射:

<servlet-mapping>
    <servlet-name>mywebsite</servlet-name>
    <url-pattern>/web/*</url-pattern>
</servlet-mapping>

任何帮助非常感谢!

解决方法:

使用重定向使所有请求属性(包括错误和整个模型)消失.因此,请勿使用重定向,或使用会话临时存储数据或使用对话.或者弄清楚如何使用类似闪存的东西(我即将推出)

另一件事 – 使用带有spring-mvc的UrlRewriteFilter是不必要的.只使用spring-mvc,您就可以完全控制类似REST的类似URL.

标签:spring-mvc,spring,spring-3,taglib
来源: https://codeday.me/bug/20190626/1298644.html