Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >JasperException: java.lang.IllegalStateException: BindingResult和bean名称'user‘的普通目标对象都不能用作请求属性

JasperException: java.lang.IllegalStateException: BindingResult和bean名称'user‘的普通目标对象都不能用作请求属性
EN

Stack Overflow用户
提问于 2017-03-11 22:02:37
回答 1查看 97关注 0票数 0

我有两个数据模型: User和Car,User可以有很多cars,所以这是User Class:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Entity
@Table(name="APP_USER")
public class User implements Serializable{

@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
......

@OneToMany(mappedBy="user",cascade=CascadeType.ALL)
private Set<Car> cars = new HashSet<Car>();

Car.java:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Entity
public class Car implements Serializable {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id ;
.....

@ManyToOne(optional=false)
@JoinColumn(name="user_fk")
private User user;

在carController中,我有为一个用户添加新车的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Controller
@RequestMapping("/cars")
public class CarController {

@Autowired
CarService carService;

@Autowired
UserService userService;

@RequestMapping(value={"/list"},method=RequestMethod.GET)
public String listCars(ModelMap model){
List<Car> cars = carService.allCars();
model.addAttribute("cars", cars);
return "car"; }

@ModelAttribute("utilisateurs")
public List<User> allUsers(){
List<User> utilisateurs = userService.findAllUsers();
return utilisateurs;
}  


@RequestMapping(value={"/newCar"},method=RequestMethod.GET)
public String newCar(ModelMap model){

Car car = new Car();
model.addAttribute("car",car);
return "carRegistration";
}

@RequestMapping(value={"newCar"},method=RequestMethod.POST)
public String newCar(@Valid Car car, BindingResult result,ModelMap model){

if (result.hasErrors()) {
    return "registration";
}
carService.save(car);
model.addAttribute("car",car);

return "redirect:/cars/list";
}

最后,在视图中,表单是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<form:form method="POST" modelAttribute="car"
                            class="form-horizontal">

      <form:input type="hidden" path="id" id="id" />

      <div class="control-group">
        <label class="control-label">Libelle</label>
        <div class="controls">
          <form:input type="text" path="libelle" id="libelle" style="height:4%" />
        </div>
      </div>
      <div class="control-group">
        <label class="control-label">Registration</label>
        <div class="controls">
          <form:input type="text" path="registration" id="email" />
        </div>
      </div>



      <div class="control-group">
        <label class="control-label">Utilisateur</label>
        <div class="controls">
          <form:select path="user" items="${utilisateurs}"  itemValue="id" itemLabel="lastName" style="margin-left: 4%;"></form:select>
        </div>
      </div>   

      <div class="form-actions">
        <input type="submit" value="Validate" class="btn btn-success" />
      </div>

    </form:form>

我可以获得视图,但是当我单击按钮submit时,我得到这个错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Neither BindingResult nor plain target object for bean name 'user' available as request attribute.

我认为用户的选择项目有问题!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-11 23:12:12

您是否为用户提供了任何Spring转换器或格式化程序?

applicationContext.xml:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 <bean id="conversionService"
      class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <list>
            <bean class="my.project.StringToUser"/>
            <bean class="my.project.StringToRole"/>

        </list>
    </property>
</bean>
<mvc:annotation-driven conversion-service="conversionService" />

它会将用户id转换为用户对象。

my.project.StringToUser:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import org.springframework.core.convert.converter.Converter;

public class StringToUser implements Converter<String, JUser> {

  @Autowired
  private UserService userService;

  @Override
  public JUser convert(String source) {
      long id = Long.valueOf(source);
      return userService.get(id);
  }
}

错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
WARNING: Failed to bind request element: org.springframework.beans.TypeMismatchException: 
    Failed to convert value of type [com.websystique.springmvc.model.User] to required type [com.websystique.springmvc.model.User]; 
nested exception is org.springframework.core.convert.ConversionFailedException:
  Failed to convert from type [com.websystique.springmvc.model.User] to
  type [@org.springframework.web.bind.annotation.ModelAttribute @javax.validation.Valid com.websystique.springmvc.model.User] 
  for value 'User [id=null, ssoId=alaa, password=alaa1991, firstName=, lastName=, email=, userProfiles=null, accounts=null, userDocuments=[], cars=[], documents=[]]';
nested exception is java.lang.ClassCastException: 
   com.websystique.springmvc.model.User cannot be cast to java.lang.String
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42741183

复制
相关文章
快速学习-综合案例RESTRUL_CRUD
发起请求,无法执行,因为delete请求必须通过post请求转换为delete请求,借助:HiddenHttpMethodFilter过滤器
cwl_java
2020/02/19
1.7K0
快速学习-综合案例RESTRUL_CRUD
学习SpringMVC——你们要的REST风格的CRUD来了
  来来来,让一下,客官,您要的REST清蒸CRUD来了,火候刚刚好,不油不腻,请慢用~~~   如果说前面是准备调料,洗菜,切菜,摆盘,那么今天就来完整的上道菜,主要说的是基于REST风格实现数据的增删改查(CRUD)操作。 用料    entity:Employee + Department   对于这样的实体类大家肯定很熟悉,一个Employee就是一个员工,一个Department就是一个部门,一个员工只属于一个部门,一个部门可以对应多个员工。   Employee.java package com
JackieZheng
2018/01/16
1.2K0
学习SpringMVC——你们要的REST风格的CRUD来了
获取对象属性类型、属性名称、属性值的研究:反射和JEXL解析引擎
先简单介绍下反射的概念:java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。 反射是java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以在运行时装配。在实际的业务中,可能会动态根据属性去获取值。 工具类如下: package com.yaoguang.common.utils.field; import java.beans.Bean
猿人谷
2018/01/17
6.4K0
Spring MVC的14个实用技巧,get一下!
通常,在Spring MVC中,我们编写一个控制器类来处理来自客户端的请求。然后,控制器调用业务类来处理与业务相关的任务,然后将客户端重定向到逻辑视图名称,该名称由Spring的调度程序Servlet解析,以呈现结果或输出。
码神联盟
2021/10/18
1K0
Spring MVC的14个实用技巧,get一下!
编写Spring MVC控制器的14个技巧
通常,在Spring MVC中,我们编写一个控制器类来处理来自客户端的请求。然后,控制器调用业务类来处理与业务相关的任务,然后将客户端重定向到逻辑视图名称,该名称由Spring的调度程序Servlet解析,以呈现结果或输出。这样就完成了典型的请求-响应周期的往返。今天整理了一下编写Spring MVC控制器的14个技巧,你今天get到了吗? \(≧▽≦)/
良月柒
2021/10/14
1.2K0
Spring框架中 Bean对象属性值的注入
注意:如果一个Bean对象同时存在set注入和构造注入两种方法,Spring在为Bean对象属性赋值时,会先使用set注入方式为属性赋值,再使用构造注入为Bean对象属性赋值。
运维搬砖
2018/12/26
4.1K0
SpringMVC参数校验,包括JavaBean和基本类型的校验
该示例项目使用SpringBoot,添加web和aop依赖。 SpringMVC最常用的校验是对一个javaBean的校验,默认使用hibernate-validator校验框架。而网上对校验单个参数,譬如String,int之类的资料极少,这一篇就是讲这个的。
天涯泪小武
2019/01/17
1.6K0
分享 14 个 Spring MVC 顶级技巧!
通常,在Spring MVC中,我们编写一个控制器类来处理来自客户端的请求。然后,控制器调用业务类来处理与业务相关的任务,然后将客户端重定向到逻辑视图名称,该名称由Spring的调度程序Servlet解析,以呈现结果或输出。
Java技术栈
2020/03/10
1K0
Vuex和普通全局对象
在构建应用时,组件化与模块化开发以及多人开发各自组件的时候,不难保证各个组件都是唯一性的,多个组件共享状态肯定是存在的,而对多个共享状态进行维护是非常麻烦的,共享状态是谁都可以进行操作和修改的,这样就会导致所有对共享状态的操作都是不可预料的,所以就需要一个统一的管理进行维护。
WindRunnerMax
2020/11/24
2.2K0
03 Spring框架 bean的属性以及bean前处理和bean后处理
整理了一下之前学习spring框架时候的一点笔记。如有错误欢迎指正,不喜勿喷。 上一节我们给出了三个小demo,具体的流程是这样的: 1.首先在aplicationContext.xml中添加<bean id="自定义id" class="包名.类名">。(还有两种工厂配置) 2.其次写一个自定义类,里面只包含一个系统输出的show()。 3.使用 ApplicationContext hw=new classpathXmlApplicationContext("applicationContext.xm
MindMrWang
2018/04/16
7600
服务器表单校验
为什么后端要做表单的校验呢,如果只使用前端来校验的话,如果浏览器把 JS 给禁用掉, 就完犊子啦
程序员 NEO
2023/10/01
1890
服务器表单校验
SpringMVC03之拦截器和JSR303
        3.3 在请求处理方法中,使用@Validated或@Valid注解要验证的对象,并根据BindingResult判断校验是否通过。另外,验证参数后必须紧跟BindingResult参数,否则spring会在校验不通过时直接抛出异常
天蝎座的程序媛
2022/11/18
4420
SpringMVC03之拦截器和JSR303
求求你别在用IF ELSE校验参数了
验证数据是贯穿所有应用程序层(从表示层到持久层)的常见任务。通常在每一层实现相同的验证逻辑,这既费时又容易出错。为了避免重复这些验证,开发人员经常将验证逻辑直接捆绑到域模型中,将域类与验证代码混在一起,这些验证代码实际上是关于类本身的元数据,与业务逻辑不相关。
程序猿DD
2020/12/18
1.9K0
求求你别在用IF ELSE校验参数了
求求你别在用IF ELSE校验参数了
验证数据是贯穿所有应用程序层(从表示层到持久层)的常见任务。通常在每一层实现相同的验证逻辑,这既费时又容易出错。为了避免重复这些验证,开发人员经常将验证逻辑直接捆绑到域模型中,将域类与验证代码混在一起,这些验证代码实际上是关于类本身的元数据,与业务逻辑不相关。
乱敲代码
2020/12/15
1.8K0
Validator,就来这一篇吧
验证数据是贯穿所有应用程序层(从表示层到持久层)的常见任务。通常在每一层实现相同的验证逻辑,这既费时又容易出错。为了避免重复这些验证,开发人员经常将验证逻辑直接捆绑到域模型中,将域类与验证代码混在一起,这些验证代码实际上是关于类本身的元数据,与业务逻辑不相关。
用户4172423
2020/12/15
2.7K0
Validator,就来这一篇吧
Spring Boot 使用 JSR303 实现参数验证
JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation。
程序员果果
2020/05/26
7810
Spring Boot 使用 JSR303 实现参数验证
JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation。
程序员果果
2020/05/19
6700
Spring Boot 使用 JSR303 实现参数验证
spring和springboot常用注解_Java常用注解
9、@JoinColumn、@OneToOne、@OneToMany、@ManyToOne
全栈程序员站长
2022/09/24
7600
14个Spring MVC超实用技巧!
这是创建可以处理一个或多个请求的控制器类的最简单方法。仅通过用构造型注释一个类@Controller ,例如:
java进阶架构师
2020/09/30
1.1K0
点击加载更多

相似问题

BindingResult和bean名称'user‘的普通目标对象都不能用作请求属性

30

BindingResult和bean名称'user‘的普通目标对象都不能用作请求属性

22

Springboot - java.lang.IllegalStateException: BindingResult和bean名称'user‘的普通目标对象都不能用作请求属性

10

Exception:java.lang.IllegalStateException: BindingResult和bean名称'user‘的普通目标对象都不能用作请求属性

12

java.lang.IllegalStateException: BindingResult和bean名称的普通目标对象都不能用作请求属性

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文