弹出表单标记错误(绑定结果)

时间:2012-10-31 12:18:44

标签: java spring

我正在自学Spring Form标签,并且遇到了一个我无法解决的简单错误。当我在浏览器中启动此应用程序时出现以下错误:

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'index' available as request attribute

我已尝试过在Google搜索中出现的大多数修补程序无济于事。有人可以找到我出错的地方吗?以下是相关组件。非常感谢。

控制器:

@Controller
@RequestMapping("/registration")
public class LoginController {

    @RequestMapping(method = RequestMethod.GET)
    public String setupForm(ModelMap model) {
        Registration registration = new Registration();
        model.addAttribute("registration", registration);
        return "index";

    }


    @RequestMapping(method = RequestMethod.POST)
    public String onSubmit(@ModelAttribute("registration") Registration registration, Map model) {
        return "success";
    }
}

JSP(/index.jsp):

        <form:form commandName="index">
        <table border="0" cellspacing="12">
            <tr>
                <td>
                    <form:input path="email"/>
                </td>
            </tr>

            <tr>
                <td>
                    <form:password path="password"/>
                </td>
            </tr>

            <tr>
                <td>
                    <input type="submit" value="Submit"/>
                </td>
            </tr>
        </table>
    </form:form>

命令对象(Registration.java):

public class Registration {
    private String password;
    private String email;
    // getters,setters

3 个答案:

答案 0 :(得分:1)

几天前面对同样的问题,我从命中和跟踪中理解的是,索引页面是一个静态页面,并且在渲染之前不会进行任何处理。如果我想在索引页面中使用表单模型绑定,我应该有一个控制器的处理程序方法,它将创建一个Registration对象,并在呈现index.jsp之前将它放在ModelAndView中

在控制器中添加一个方法,如下所示,然后尝试

@RequestMapping(method = RequestMethod.GET, value="/")
public ModelAndView initiate(){
ModelAndView objModView = new ModelAndView("/index.jsp");
objModView.addObject("registration",new Registration());
return objModView;
 }

答案 1 :(得分:0)

在索引页面中更正以下内容并尝试

<form:form commandName="index"><form:form commandName="registration">

如果上述方法不起作用,您也可以这样做

<form:form modelAttribute="registration" commandName="registration">

由于

答案 2 :(得分:0)

看到的错误是因为当您提交表单时,您必须具有与@ModelAttribute注释关联的绑定结果。

尝试将代码更改为:

    @RequestMapping(method = RequestMethod.POST)
    public String onSubmit(@ModelAttribute("registration") Registration registration, BindingResult result, Map model){
          return "success";
       }

另请注意,应在“模型属性”之后立即执行“绑定结果”对象。

如果您使用两个@ModelAttributes,那么每个@ModelAttributes都应该有自己的绑定结果对象。

请参阅弹簧源指南以获取所有相关文档

http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/mvc.html

相关问题