spring3 页面form标签 报错 Neither BindingResult nor plain target object for bean name "company"

本文解决在使用Spring MVC进行表单填写公司信息并添加到数据库过程中遇到的非法状态错误。通过在控制器中预先创建一个company对象并将其放入上下文中,避免了错误的发生。
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name "company" available as request attribute
今天在学spring mvc的时候,想做一个表单填写公司信息,然后添加到数据库中,但是spring标签一直报错,弄了很久,一直无解。
后来百度,谷歌好久,才想到在进入form表单页面之前,要有一个company对象才可以在表单的标签中识别出来,所以在controller里面
添加了如下内容:
@RequestMapping(value="/addCompany",method = RequestMethod.GET)
public ModelAndView initForm(ModelMap model){
Company company = new Company(); //用于转换到form表单的对象
return new ModelAndView("addCompany").addObject(company); //跳转到addCompany页面
}
addCompany页面的form表单如下:
<!-- 进入表单页面前必须创建一个company对象,把他放到context里面去,否则会报错 -->
<form:form commandName="company" modelAttribute="company" action="addCompany" method="post">
<fieldset>
<legend>Account Fields</legend>
<p>
<form:label path="name">Name</form:label>           <!--这里对应company类中的name属性-->
<form:input path="name" /><form:errors path="name" />    
</p>
<p>
<form:label path="password">Password</form:label>   <!--这里对应company类中的name属性-->


<form:input path="password" /><form:errors path="password" />
</p>
<p>
<input id="create" type="submit" value="Create" />
</p>
</fieldset>
</form:form>
这样就不会报错了,希望对大家有帮助!
### 解决 `java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name &#39;response&#39; available as request attribute` 问题 此错误通常在使用 Spring MVC 表单绑定,且视图中引用了不存在于请求属性里的表单对象时出现。以下几种解决办法可参考: #### 确保在控制器中添加表单对象到模型 在控制器方法内,要把表单对象添加到 `Model` 里。示例如下: ```java import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @Controller public class MyController { @GetMapping("/your-url") public String showForm(Model model) { // 创建表单对象 Response response = new Response(); model.addAttribute("response", response); return "your-view-name"; } } class Response { // 表单对象的属性和相关方法 private String someField; public String getSomeField() { return someField; } public void setSomeField(String someField) { this.someField = someField; } } ``` #### 转发时确保对象传递 若使用转发操作,要保证表单对象能正确传递。可借助 `RedirectAttributes` 进行重定向,示例如下: ```java import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.mvc.support.RedirectAttributes; @Controller @RequestMapping("/your-url") public class MyController { @GetMapping public String showForm(Model model) { Response response = new Response(); model.addAttribute("response", response); return "forward:/another-url"; } @GetMapping("/another-url") public String anotherForm(Model model) { // 这里可以保证表单对象被正确传递 return "your-view-name"; } } ``` ### 解决 `arseException: Error during execution of processor &#39;org.thymeleaf.spring6.processor.SpringInputGeneralFieldTagProcessor&#39; (template: "pages/JAFRSNO01030" - line 16, col 41)` 问题 此错误一般是 Thymeleaf 模板解析出错导致的,以下是一些解决办法: #### 检查语法错误 Thymeleaf 模板采用特定语法,如 `th:` 前缀。要确保模板文件 `pages/JAFRSNO01030.html` 的第16行第41列附近无语法错误,例如 `th:` 属性的使用是否正确,标签是否正确闭合等。 #### 检查上下文变量 该处理器通常用于处理表单输入字段,可能依赖于 Spring 上下文的变量。要保证在第16行第41列使用的上下文变量(如 `th:value`、`th:field` 等)在当前上下文中是可用的,且类型正确。 #### 检查 Thymeleaf 配置 确保 Thymeleaf 配置正确。可在 `application.properties` 中添加或检查相关配置: ```properties # 关闭缓存,开发过程中无须重启 spring.thymeleaf.cache=false # 设置页面编码 spring.thymeleaf.encoding=UTF-8 spring.thymeleaf.mode=HTML5 # 设置页面后缀 spring.thymeleaf.suffix=.html # 设置页面的存储路径 spring.thymeleaf.prefix=classpath:/templates/ ``` #### 检查 Spring 版本兼容性 确保 Spring 和 Thymeleaf 版本兼容。不同版本的 Spring 和 Thymeleaf 可能存在兼容性问题,建议使用官方推荐的版本组合。 #### 调试信息输出 在开发环境中,可开启 Thymeleaf 的调试模式,以获取更详细的错误信息。在 `application.properties` 中添加: ```properties logging.level.org.thymeleaf=DEBUG ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值