2016-03-13 2 views
2

Comment utiliser différents POJO comme Address et Certificate objet de classe utilisant ModelDriven Interface dans la même action pour effectuer un mappage de collection en utilisant Hibernate dans Struts2?Mutilple différents POJO utilisant Model Driven

ici est l'exemple de code:

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

comment retourner des objets d'adresse et de certificats.

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


} 
+1

N'utilisez pas modeldriven. –

+0

Oui. J'ai réalisé que . Je ne devrais pas utiliser le modèle conduit. – Shaurya

Répondre

1

Si vous utilisez ModelDriven et vous avez plusieurs haricots (dans la même classe d'action) que vous devez lier à la vue. Vous pouvez les agréger à l'objet du modèle.

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

Dans la JSP, vous pouvez utiliser address.xxx et certificate.yyy noms. Quel est le meilleur avec cette approche vous mappez les propriétés des beans de différents types en spécifiant un nom de préfixe sans contrôles de type de l'objet de modèle.

Si vous avez plusieurs classes d'actions que vous pouvez utiliser leurs propres modèles

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

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

Mais le problème avec cette approche si vous partagez le même JSP vous ne devriez pas les utiliser à la fois, car il ne peut pas distinguer à quelle classe appartient une propriété.

La même chose si vous implémentez ModelDriven<Object>, puis renvoyez les instances en tant qu'objet de modèle. La vue ne sait pas quel modèle est utilisé pour lier ses propriétés (sauf si vous vérifiez explicitement le type d'instance). Il suppose simplement que le modèle a une propriété liée. Une note de côté: l'utilisation de modèles de différents types apporte une complexité inutile à la logique de l'application, ainsi que la duplication du code. Si vous n'avez pas besoin d'utiliser model-driven, alors mieux vaut l'éviter. Vous pouvez utiliser plusieurs objets de différentes classes agrégées à la classe d'action au lieu de la classe de modèle.

+0

Merci, oui cela peut être fait.Merci Roman C. – Shaurya

+0

Bienvenue sur StackOverflow pour apprendre comment cela fonctionne voir http://stackoverflow.com/tour –