1

尝试访问控制器时出现问题。

这是我的控制器:

@Controller
@RequestMapping("/index.htm")
public class LoginController {

    @Autowired
    private UserService userService;

    @RequestMapping(method = RequestMethod.GET)
    public String showForm(Map model) {
        model.put("index", new LoginForm());
        return "index";
    }

    @RequestMapping(method = RequestMethod.POST)
    public String processForm(LoginForm loginForm, BindingResult result,
                              Map model) {

        if (result.hasErrors()) {
            HashMap<String, String> errors = new HashMap<String, String>();
            for (FieldError error : result.getFieldErrors()) {
                errors.put(error.getField(), error.getDefaultMessage());
            }
            model.put("errors", errors);
            return "index";
        }

        List<User> users = userService.getUsers();
        loginForm = (LoginForm) model.get("loginForm");

        for (User user : users) {
            if (!loginForm.getEmail().equals(user.getEmail()) || !loginForm.getPassword().equals(user.getPassword())) {
                return "index";
            }
        }

        model.put("index", loginForm);
        return "loginsuccess";
    }

}

这是我的表格:

    <form:form action="index.htm" commandName="index">

        <table border="0" cellspacing="12">
            <tr>
                 <td>
                     <spring:message code="application.loginForm.email"/>
                 </td>
                 <td>
                    <form:input path="email"/>
                 </td>
                 <td class="error">
                    <form:errors path="email"/>
                 </td>
            </tr>
            <tr>
                 <td>
                     <spring:message code="application.loginForm.password"/>
                 </td>
                 <td>
                    <form:password path="password"/>
                 </td>
                 <td class="error">
                    <form:errors path="password"/>
                 </td>
            </tr>
            <tr>
                 <td>
                     <input type="submit" value="Submit"/>
                 </td>
            </tr>
        </table>

    </form:form>

在提交表单时,我收到了这个异常:

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

我在这里做错了什么?

4

1 回答 1

2

这是因为你只是在底部做这件事

model.put("index", loginForm);

如果您从验证错误或成功返回,则模型映射中没有名为“index”的支持对象,因此您的表单标签commandName="index"适合。

一个常见的解决方案是简单地这样做

@ModelAttribute("index")
public LoginForm getLoginForm() {
  return new LoginForm();
}

那么总会有一个存在,您可以从 GET 方法中添加它。

于 2012-05-29T16:53:41.830 回答