Struts 2 中使用 ModelDriven 的多个不同 POJO
Multiple different POJOs using ModelDriven in Struts 2
如何在同一 Action
中使用 Address
和 Certificate
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;
}
如何returnAddress
和Certificate
对象?
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.xxx
和 certificate.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.
如何在同一 Action
中使用 Address
和 Certificate
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;
}
如何returnAddress
和Certificate
对象?
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.xxx
和 certificate.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.