2015-11-02 3 views
1

En essayant d'extraire des données de la base de données en utilisant Hibernate ORM et d'obtenir la sortie en tant que résultat json en utilisant Struts2. Tout fonctionne pour récupérer des données à partir de DB, mais pour le résultat json je reçois seulement {}. Je pense que j'ai fait quelque chose de mal avec mon codage. Mais besoin d'aide pour le comprendre.Donner un résultat json vide lors de l'exécution de struts 2 action class

Voici ma classe d'action:

@ParentPackage("json-default") 
public class SocialIconsAction extends ActionSupport { 

    private List<TiendayaCurrencies> _currency; 

    public List<TiendayaCurrencies> getCurrency() { 
     return _currency; 
    } 

    public void setCurrency(List<TiendayaCurrencies> _currency) { 
     this._currency = _currency; 
    } 

    @Action(value = "currencies", results = { 
     @Result(name = "success", type = "json", params = {"includeProperties", 
      "_currency\\[\\d+\\]\\..*"})}) 
    @Override 
    public String execute() { 
     _currency = loadCurrencies(); 

     /*Nothing wrong with the DB results.Just to test everything works fine.*/ 
     //for (TiendayaCurrencies _currency1 : _currency) { 
      // System.out.println("Title - "+_currency1.getTitle()); 
     // } 


     return SUCCESS; 
    } 

    private List<TiendayaCurrencies> loadCurrencies() { 
     Session session = com.tiendaya.connection.HibernateUtil. 
       getSessionFactory().openSession(); 
     List<TiendayaCurrencies> cList = session. 
       createCriteria(TiendayaCurrencies.class).list(); 

     return cList; 
    } 
} 

classe Pojo:

public class TiendayaCurrencies{ 


    private Integer id; 
    private String title; 
    private String code; 
    private String symbolLeft; 
    private String symbolRight; 
    private char decimalPlace; 
    ... 

Y at-il quelque chose de mal avec les includeProperties (Le seul endroit où je peux penser ..) Quelqu'un peut-il suggérer un moyen .. J'ai tout essayé ...

Edit:

public class SocialIconsAction extends ActionSupport { 

    private List<TiendayaCurrencies> _currency=new ArrayList<>(); 
    private String sample="working"; 

    public String getSample() { 
     return sample; 
    } 

    public void setSample(String sample) { 
     this.sample = sample; 
    } 
    ... 


@Action(value = "currencies", results = { 
@Result(name = "success", type = "json", params = {"includeProperties", "sample"})}) 

... 

Comme JSON il me donne: { "échantillon": "travail"} qui signifie qu'il fonctionne très bien. Alors pourquoi ça ne marche pas avec le ArrayList ??

+0

montrez votre JSP .. – Babel

+0

** http: // localhost: 8080/Tiendaya_Project_Final/devises ** -> (valeur de l'action) comment j'exécute ma classe d'action. Cela me donne un résultat vide. ** {} - only ** –

+0

N'utilisez-vous pas ce résultat JSON n'importe où? .. Comment pourriez-vous dire que JSON est vide? Je suspecte .. Dans votre JSP ou quelque part vous faites référence à la mauvaise liste de Json. – Babel

Répondre

2

Le plugin JSON Struts2 va sérialiser l'ensemble de votre action, y compris toutes les propriétés (non-transitoires) avec un getter. Puisque vous cachez vos variables (ce n'est certainement pas une bonne pratique, surtout parce qu'il vous oblige à écrire manuellement chaque getter et setter ... brr), et vous avez des noms différents pour la variable et pour le getter, vous êtes pointant vers la variable, mais vous devez pointer le getter (alors currency au lieu de _currency):

@Action(value = "currencies", results = { 
    @Result(name = "success", 
      type = "json", 
      params = {"includeProperties","currency\\[\\d+\\]\\..*"}) 
}) 

Notez également que vous pouvez spécifier un objet racine, qui est souvent préféré à la technique includeProperties, comme described here:

@Action(value = "currencies", results = { 
    @Result(name = "success", 
      type = "json", 
      params = {"root","currency"}) 
}) 
+2

tant d'homme ... Vous sauvez un autre jour de la mienne ... Je perdais tellement de temps, à la recherche d'une solution à cette stupide erreur de mot ** devise **. Merci encore pour la réponse. Je vais voter à nouveau si je pouvais .. –