Struts 2 中使用 ModelDriven 的多个不同 POJO

Multiple different POJOs using ModelDriven in Struts 2

如何在同一 Action 中使用 AddressCertificate class 对象等不同的 POJO 使用 ModelDriven 接口在 Action 中使用 Hibernate 执行集合映射=29=]?

代码示例如下:

 package com.acv.in.action;
 import java.util.HashSet;
 import java.util.Set;
 import com.acv.in.bean.Student;
 import com.acv.in.dao.DAO;
 import com.acv.in.dao.DAOImpl;
 import com.opensymphony.xwork2.ActionSupport;
 import com.opensymphony.xwork2.ModelDriven;

 public class UserActionImpl extends ActionSupport implements  ModelDriven<Student>{

private static final long serialVersionUID = 1L;
Set<String> docList= new HashSet<String>();
DAO dao= new DAOImpl();
private Student student= new Student();
 
@Override
public Student getModel() {
    // TODO Auto-generated method stub
    return student;
}

如何returnAddressCertificate对象?

public UserActionImpl()
{
    
}

public String add() {
  System.out.println("inside add");
  dao.insert(student);
    return "success";
}

 
public String delete() {
    // TODO Auto-generated method stub
    return "success";
}


public String update() {
    // TODO Auto-generated method stub
    return "success";
}

 
public String getById() {
    // TODO Auto-generated method stub
    return "success";
}


public String getAll() {
    // TODO Auto-generated method stub
    return "success";
}

public Set<String> getDocList() {
    return docList;
}

public void setDocList(Set<String> docList) {
    this.docList = docList;
}

public Student getStudent() {
    return student;
}

public void setStudent(Student student) {
    this.student = student;
}


public DAO getDao() {
    return dao;
}

public void setDao(DAO dao) {
    this.dao = dao;
}

 
}

如果您正在使用 ModelDriven 并且您有多个必须绑定到视图的 beans(在同一操作中 class)。您可以将它们聚合到模型对象中。

public class Student {
  private Address address; 
  private Certificate certificate;
  //getters and setters
} 

在 JSP 中您可以使用 address.xxxcertificate.yyy 名称。这种方法的最佳之处在于,您可以通过指定前缀名称来映射不同类型 bean 的属性,而无需对模型对象进行类型检查。

如果你有多个动作 classes 你可以使用他们自己的模型,比如

public class AddressActionImpl extends ActionSupport implements  ModelDriven<Address>{ }

public class CertificateActionImpl extends ActionSupport implements  ModelDriven<Certificate>{ }

但是这种方法的问题是,如果您共享相同的 JSP,则不应同时使用它们,因为它无法区分 class 和 属性 属于哪个。

如果您实现 ModelDriven<Object> 然后 return 任一实例作为模型对象,则相同。视图不知道哪个模型用于绑定其属性(除非您明确检查实例类型)。它只是假设模型有一个绑定到的 属性。

旁注:

使用不同类型的模型会给应用程序逻辑带来不必要的复杂性,以及代码重复。如果您没有必要使用 ModelDriven,那么最好避免使用它。您可以使用多个不同 classes 的对象聚合到 Action class 而不是模型 class.