0

我正在自学 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
4

3 回答 3

1

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

在您的控制器中添加一个方法,如下所示并尝试

@RequestMapping(method = RequestMethod.GET, value="/")
public ModelAndView initiate(){
ModelAndView objModView = new ModelAndView("/index.jsp");
objModView.addObject("registration",new Registration());
return objModView;
 }
于 2013-05-20T16:21:14.443 回答
0

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

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

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

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

谢谢

于 2012-10-31T12:28:51.297 回答
0

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

尝试将您的代码更改为:

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

另请注意,绑定结果对象应紧跟在模型属性之后。

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

请参阅 spring 源代码指南以获取所有相关文档

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

于 2012-10-31T23:07:32.593 回答