【问题标题】:JSP EL/Apache Tiles --- return object has composite keyJSP EL/Apache Tiles --- 返回对象有复合键
【发布时间】:2013-03-18 16:24:36
【问题描述】:

我发现了一个使用 Spring MVC/Apache Tiles 的问题。

update.jspx 为当前实体(Position.java)提供了一个更新表单,它有一个复合键:

@RooJpaActiveRecord(persistenceUnit = "theUnit", transactionManager = "theManager", table = "theTable", identifierType = PositionPK.class)
Class Position{
    //User user;
    //Role role;
    //other fields....
}

这是一个旧的遗留类,使用UserRole 作为复合键(这意味着它不是一个好的设计,但我们必须忍受它)。所以我有另一个使用@RooIdentifier 的复合键类

@RooIdentifier
Class PositionPK extends Serializable {
    User user;
    Role role;
    //override equals and hashCode blahblah...
}

问题是,在 update.jspx 页面上,我提供了一个字段来更新位置的User,表单不返回异常,但将User 返回为null

然后我尝试将 user 字段添加回 Position 类(也不是很好的设计,但出于调试目的,因此 User 存在于实体类和 PK 类中),现在应用程序抛出异常:

javax.validation.ValidationException: Call to TraversableResolver.isReachable() threw an exception

调用 TraversableResolver.isReachable() 引发异常

我挖掘了一个异常,似乎实体类可能缺少 getter/setter 或 id。由于 getter/setter 都由 Roo 管理,所以这应该不是问题,所以我认为问题是 Spring MVC 如何将主键类转换为前端 jsp 视图的兼容性,反之亦然。

任何提示将不胜感激。

【问题讨论】:

    标签: java spring jsp jakarta-ee spring-roo


    【解决方案1】:

    在您提供的代码示例中,我没有看到用于自动生成 getter 和 setter 的注释。

    既然您提到 Roo 将管理 getter 和 setter,您可以尝试在您的主键类中添加 @RooJavaBean 注释吗?

    【讨论】:

    • 谢谢。是的,这些类的注释与 RooJavaBean 相同,但你说得对,大多数异常是由于实体缺少 setter/getter 引起的。
    • 我发现问题是复合键类PositionPK的一些字段在视图页面中呈现的不是很好(我用的是position.user.id而不是position.id.user .id) 所以得到例外。我想这是在使用复合键类时需要考虑的事情,因为可能有两种方法可以访问成员字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    • 2021-11-27
    • 2012-05-24
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多