1

何が間違っているのか理解できません。私はコントローラーを持っています:

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

    @Autowired
    private AccountService accountService;

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

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

    @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<Account> accounts = accountService.findAll();
        loginForm = (LoginForm) model.get("loginForm");


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

}

そしてSpringhtmlフォーム:

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

    <table cellspacing="10">
        <tr>
            <td>
                <form:label path="username">
                    <spring:message code="main.login.username"/>
                </form:label>
            </td>
            <td>
                <form:input path="username" cssClass="textField"/>
            </td>
        </tr>
        <tr>
            <td>
                <form:label path="password">
                    <spring:message code="main.login.password"/>
                </form:label>
            </td>
            <td>
                <form:password path="password" cssClass="textField"/>
            </td>
        </tr>
        <tr>
            <td>
                <input type="submit" class="button" value="Login"/>
            </td>
        </tr>
    </table>

</form:form>

URLにアクセスしようとすると:http://localhost:8080/webclient/index.htm

私はこの例外を受け取り続けます:

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

コントローラの何が問題になっていて、なぜそのような例外が発生し続けるのですか?

4

1 に答える 1

0

以下の変更を行います。まず、GETメソッドは次のようになります。

@RequestMapping(method = RequestMethod.GET)
public String showForm(@ModelAttribute("index") LoginForm loginForm) {
    return "index";
}

アノテーションを使用する@ModelAttributeと、リクエストのモデルに「インデックス」が自動的に配置されます。

また、POSTメソッド宣言は次のようになります。

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

最後に、おそらく実際の問題として、コントローラークラスの@RequestMappingアノテーションを次のように変更します。

@RequestMapping(value = "/index")

あなたが持っている「.htm」は冗長です。「.htm」リクエストに応答するようにweb.xmlとSpring設定をすでに設定しています。

于 2012-09-25T20:44:56.387 に答える