【问题标题】:spring form validation in object对象中的弹簧表单验证
【发布时间】:2014-11-06 03:42:06
【问题描述】:

说我的命令看起来像这样

public class MyForm {
    @Max(99)
    private int mode;
    private MyObj myObj;

我的 MyObj 是

public class MyObj {
    private String myStr;
    private int myInt;

我的控制器看起来像这样

@Controller
public class MyController {
    @RequestMapping(value = "/Anything.htm")
    public String AnythingMethod(@Valid MyForm myForm, .....

我的 JSP 看起来像这样

<form:input path="mode"/>
<form:input path="myObj.myStr"/>

如何为 myStr 和 myInt 注入验证,例如 @NotNull @MAx @Min?如何在messages.properties 中指定它们的错误消息?请帮忙。

【问题讨论】:

  • 为什么不能像为MyForm.mode 那样将这些注释添加到这些成员变量中?
  • @isim,即使在 MyObj 中使用验证注入,它也不起作用。如果我在控制器中使用@Valid MyForm,它只会验证 MyForm.mode,而不是 MyObj.myInt。如果我在控制器中使用@Valid MyObj,它只会验证 MyObj.myInt,而不是 MyForm.mode。

标签: spring validation view


【解决方案1】:

不确定您问题中发布的代码是否完整,您可能缺少一些注释。此外,由于您在评论中提到其他一些字段的验证有效,我将假设您拥有所有 dependencies sorted out

所以试试这个:

在您的MyForm 班级中:

public class MyForm {
    @Max(99, message="{myform.mode.max}")
    private int mode;

    @Valid // add @valid annotation
    private MyObj myObj;

在您的MyObj 班级中:

public class MyObj {
    @NotBlank(message="{myobj.mystr.notnull}")
    private String myStr;

    @Max(/* some value */, message="{myobj.mystr.max}")
    @Min(/* some value */, message="{myobj.mystr.min}")
    private int myInt;

在您的MyController 班级中:

@Controller
public class MyController {
    @RequestMapping(value = "/Anything.htm") /* add @ModelAttribute annotation */       
    public String AnythingMethod(@Valid @ModelAttribute('myForm') MyForm myForm, .....) 

至于在.properties 文件中指定错误消息,请将它们全部放入ValidationMessages.properties 文件中,并将此文件添加到类路径的根目录中。 (例如,/WEB-INF/classesresources 文件夹等)。

希望这会有所帮助。

【讨论】:

  • 感谢您的帮助。问题已解决。我只是不知道如何在 myObj 中使用 @Valid。但是,我无法使 message= parm 工作。我在spring的messages.properties中添加了myobj.mystr.max = myInt invalid(我的其他味精在哪里工作)。我还遵循了休眠验证器的配置,将 ValidationMessges.properties 添加到 WEB-INFO\,并使用相同的 msg 字符串。但两者都将我的{myobj.mystr.max} 作为消息。有什么我错过的吗?
  • @senderj 所有验证错误消息都应该进入ValidationMessages.properties。您可以将此文件添加到存储messages.properties 文件的任何位置。另外,请记住,它是WEB-INF,而不是WEB-INFO
  • 抱歉,WEB-INFO 是一个错字。 NetBeans 项目资源管理器仅公开 WEB-INF,因此将 ValidationMessages.properties 添加到 WEB-INF,而不是 WEB-INF/classes。我必须使用ant脚本来复制。有没有xml config方法来指定文件的名称和位置??
  • 更改文件名和位置的唯一方法是使用hibernate-validation ResourceBundleMessageInterpolator及其捆绑定位器APIforum.hibernate.org/viewtopic.php?f=26&t=1011623指定配置
  • 在我的情况下有点矫枉过正,为了简单起见,我将继续使用 ant 复制文件方法。谢谢你的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-20
  • 1970-01-01
  • 2017-04-02
相关资源
最近更新 更多