gpt4 book ai didi

java - 继续获取: Neither BindingResult nor plain target object for bean name 'index' available as request attribute

转载 作者:行者123 更新时间:2023-12-01 05:06:31 25 4
gpt4 key购买 nike

我不明白我做错了什么。我有一个 Controller :

@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";
}

}

和 Spring html 表单:

<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

我的 Controller 出了什么问题,为什么我总是遇到这样的异常?

最佳答案

我将进行以下更改。首先,您的 GET 方法应该类似于:

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

使用@ModelAttribute注释会自动将“index”放入请求的模型中。

并且您的 POST 方法声明应该类似于:

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

最后,可能是真正的问题,将 Controller 类的 @RequestMapping 注释更改为:

@RequestMapping(value = "/index")

您拥有的“.htm”是多余的。您已经配置了 web.xml 和 Spring 配置来响应“.htm”请求。

关于java - 继续获取: Neither BindingResult nor plain target object for bean name 'index' available as request attribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12585790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com