使用模型驱动的多个不同的POJO

时间:2016-03-13 11:46:26

标签: java struts2 model-driven

如何在同一个动作中使用AddressCertificate类对象使用ModelDriven 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; } 类对象在Struts2中使用Hibernate执行集合映射?

这是代码示例:

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


}

如何返回地址和证书对象。

model.freqItemsets
  .map { fi => s"""[${fi.items.mkString(",")}], ${fi.freq}""" }
  .saveAsTextFile(path)

1 个答案:

答案 0 :(得分: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>然后将任一实例作为模型对象返回,则同样如此。视图不知道使用哪个模型绑定其属性(除非您明确检查实例类型)。它只是假设模型具有绑定的属性。

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