ssh框架使用ModelDriven封装的实体中包含对象类型属性的问题(Error setting expression 'xxx.xx' with value '[Ljava.lang.Str...

最近练习了一个项目,是用的ssh框架做的一个系统,虽说项目是在网上参考的,但还是有好多坑啊,都是因为对相关技术不熟悉的原因造成的,话不多说,直接上问题和解决方案
项目的部分(问题解决前):

  • 实体类:除了普通类型的属性,还有对象类型的属性
public class CategorySecond implements Serializable {
    private static final long serialVersionUID = 1L;
    private Integer csid;
    private String csname;
    // 所属一级分类.存的是一级分类的对象.
    private Category category;
    // 配置商品集合
    private Set products = new HashSet();
        // get、set自行补充
  • 前端表单重点部分(对象类型是传的category的cid过去)

    
        二级分类名称:
    
    
        
    
    
        所属的一级分类:
    
    
        
    

  • action使用ModelDriven接收数据并封装实体类
public class AdminCategorySecondAction extends ActionSupport implements ModelDriven {
    // 模型驱动使用的对象
    private CategorySecond categorySecond = new CategorySecond();

    // 注入二级Service
    private CategorySecondService categorySecondService;
    // 注入一级分类的Service
    private CategoryService categoryService;

    @Override
    public CategorySecond getModel() {
        return categorySecond;
    }
// 以下具体业务方法省略
}

其他Java文件不重要,不展示
现在在前端输入表单信息并提交,表面上数据增加成功,但是数据库里category并没有关联上,于是看到控制台报错:
出现的问题:(重点信息)
() 17:58:53,935 ERROR InstantiatingNullHandler:38 - Could not create and/or set value back on to object java.lang.IllegalArgumentException at org.springframework.asm.ClassReader.(Unknown Source) at org.springframework.asm.ClassReader.(Unknown Source) at org.springframework.asm.ClassReader.(Unknown Source) at ......... ()


() 17:58:53,947 WARN OgnlValueStack:64 - Error setting expression 'category.cid' with value '[Ljava.lang.String;@7837e65a' ognl.OgnlException: target is null for setProperty(null, "cid", [Ljava.lang.String;@7837e65a) .......... (


卡在这一步,于是回头看我参考项目的代码,每一个模块代码都一毛一样!于是开始疯狂的带着报错信息去百度,找到了很多方法,都说什么get、set方法没有加(包括实体类里面的和action类里的),所有方法都试了,解决方法都翻烂了,依旧没有解决这个问题,于是转换了下思考角度,想着从action的ModelDriven入手,直到翻到了这篇文章下面的评论,原来是实体类中对象属性没有实例化,终于!改了之后就行了,人都觉得顺畅了
参考解决方案修改实体类,实例化了对象属性:

public class CategorySecond implements Serializable {
    private static final long serialVersionUID = 1L;
    private Integer csid;
    private String csname;
    // 所属一级分类.存的是一级分类的对象.
    private Category category = new Category();
    // 配置商品集合
    private Set products = new HashSet();

至此问题终于解决,总结:自己太菜,对好多技术底层及思想不清楚

你可能感兴趣的:(ssh框架使用ModelDriven封装的实体中包含对象类型属性的问题(Error setting expression 'xxx.xx' with value '[Ljava.lang.Str...)