【问题标题】:Entity POJO's as Action classes in Struts 2实体 POJO 作为 Struts 2 中的 Action 类
【发布时间】:2015-01-29 19:53:48
【问题描述】:

我在一个项目中有大约 12 个表,我希望将 Hibernate 用于数据库。

是否必须使用ModelDriven接口将每个POJO映射到一个类(共12个类)?

我不能只使用 POJO 类本身来映射表单中的每个字段吗?

例如

public class Xyz{
@Id
private int sno;
private String xyz;
//getters setters
public String execute(){
// Hibernate code
return "success";
}}

这是不受欢迎的事情,而不是标准的编码实践吗?如果有,为什么?

【问题讨论】:

  • 不要使用模型驱动接口。您可以将您的实体放在行动类中。 class Action { EntityOne entityOne; EntityTwo entityTwo;}。并且不要将动作与模型混为一谈。
  • 说如果我必须获取表单数据,据我所知,我只有两个选项之一 1)或者在另一个类中再次使用所有数据成员并将它们映射到实体的成员类,或者 2)使用我不愿意使用的 ModelDriven 接口,或者,3)我这样做的方式,但我没有看到任何遵循我的方法的教程
  • 您的第一个选项比其他选项更好,但您不必将实体类的所有成员都映射到操作。请参阅我的第一条评论中的小 sn-p 代码。

标签: java hibernate jpa struts2 pojo


【解决方案1】:

视图层上使用的模型不一定是您的业务模型,但它应该反映产生输出所需的数据。

无论您是否使用ModelDriven,您都需要一个视图模型。您可以为其使用动作类或将模型聚合到动作,类似于ModelDriven,但不实现此接口,因此放弃modelDriven interceptor

例如你的班级可以改为

public class XyzAction extends ActionSupport {

  private Xyz model = new Xyz();

  public Xyz getModel(){ return model;}

  public String execute(){
    // Hibernate code
    Xyz xyz = session.get(Xyz.class, id);
    //populate the model
    model.setSno(xyz.getSno());
    model.setXyz(xyz.getXyz());

    return "success";
  }
}

您不能将实体 POJO 用作 Struts 2 中的 Action 类。因为它们由 Hibernate 管理,但 Action 对象由 Struts 2 管理,并且它们具有不同的生命周期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 2017-08-03
    • 2013-07-08
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    相关资源
    最近更新 更多