当声明的字段留空时,@ ModelAttribute不起作用

时间:2013-03-08 07:16:55

标签: html spring-mvc controller spring-roo

以下是我的代码......

@RequestMapping(value = "/submitnewstory", method = RequestMethod.POST)
    @ResponseBody
    public String save(@ModelAttribute("storyInsertForm") StoryInsertForm uploadForm, HttpSession session, Model map) {
}

HTML代码:

<form:form id="contentForm" class="cssform2" action="submitnewstory" method="post" enctype="multipart/form-data" modelAttribute="storyInsertForm">

</form:form>

发生了什么事?

假设我的模型中有两个字段(在本例中为StoryInsertForm),即String firstnameString lastname。我必须在<form:form>中声明相同的变量,如下所示

<form:form id="contentForm" class="cssform2" action="submitnewstory" method="post" enctype="multipart/form-data" modelAttribute="storyInsertForm">
    <input type="text" name="firstname" id="firstname" />
    <input type="text" name="lastname" id="lastname" />
</form:form>

发生的事情是,如果您为第一个输入赋值而忽略第二个输入,则数据甚至不会到达控制器。但是如果你提供所有值,即为两个输入类型文本提供输入,它会找到控制器,一切正常。

另一个观察说,如果你没有声明其中一个字段,即如下所示:

<form:form id="contentForm" class="cssform2" action="submitnewstory" method="post" enctype="multipart/form-data" modelAttribute="storyInsertForm">
    <input type="text" name="firstname" id="firstname" />
<!--    <input type="text" name="lastname" id="lastname" /> -->
</form:form>

数据仍会使用上述字段中提供的数据发布(在本例中为firstname)。

摘要

如果已关联html中的字段,则必须在输入类型中输入一些值,否则什么都不会到达控制器。

期待您的帮助。

2 个答案:

答案 0 :(得分:0)

我有同样的问题;我无法解决它,但可以通过使用

来绕过它
<form></form> 

而不是

 <form:form></form:form> 

希望它有所帮助!

答案 1 :(得分:0)

我的想法,

您还必须绑定表单输入标记以便使用

Spring Form TagLib。

<form:form id="contentForm" class="cssform2" action="submitnewstory" method="post" enctype="multipart/form-data" modelAttribute="storyInsertForm">
    <form:input  path="firstname" id="firstname" />
    <form:input  path="lastname" id="lastname" />
</form:form>

此外,我不知道您的控制器编码是什么,所以我认为以下几点值得一提 -

1&GT;在作为RequestMethod GET返回页面的函数中,为表单添加模型属性。

在这种情况下,完整编码应为 -

@RequestMapping(value = "/getpage.htm", method = RequestMethod.POST)
public String getPage(Model model){
        ........
        Other Code Snippet
        .........

    StoryInsertForm uploadForm = new StoryInsertForm();
    model.addAttribute(“storyInsertForm”,  uploadForm);
    return “login”;
}

2 - ;另外将BindingResult参数添加到数据保存方法,否则你应该得到一个异常 -

所以save方法的代码应该是 -

@RequestMapping(value = "/submitnewstory", method = RequestMethod.POST)
    @ResponseBody
    public String save(@ModelAttribute("storyInsertForm") StoryInsertForm uploadForm, BindingResult result,  HttpSession session, Model map) {
     ...........
     Your Save Business Logic and Other DAO Method call etc...
     ...........
}

我希望,上面的代码可以解决你的问题。