2

如何在Struts2中使用不同的POJOAddress和使用接口的Certificate类对象来使用Hibernate执行集合映射?ModelDrivenAction

这是代码示例:

 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;
}

如何返回AddressCertificate对象?

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;
}

 
}
4

1 回答 1

1

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

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

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

如果您有多个动作类,则可以使用它们自己的模型,例如

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

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

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

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

旁注:

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

于 2016-03-13T12:40:12.287 回答