2017-02-16 4 views
0

J'ai deux tables Auteur, Livres. Et POJO, .hbm.xml pour chacune des tables. J'ai écrit une requête select qui me donne quelques détails des deux tables.arraylist (javaObect) itération dans le modèle de vitesse

select A.id.BookNum,A.id.AuthorName,B.id.DatePublished,B.id.Price 
,B.id.Condition,B.id.BookBought from Author A, Book B where 
B.id.Condition == 'NEW' and A.id.BookNum = A.id.BookNum order by 
A.id.AuthorName; 

J'ai les résultats et je les ai stockés dans ArrayList. UnApprovedBookList Quand j'essaye d'afficher ceci dans le modèle de vitesse je ne peux pas itérer ceci. J'ai mes POJOs en tant qu'auteur, livre qui a getter()/Setter() pour AuthorId et BookId respectivement et AuthorId, BookId qui a les getters/setters pour les champs dedans.

public class Book implements java.io.Serializable { 
     private static final long serialVersionUID = 1L; 
     private BookId id; 
     public Book(){ } 
     public Book (BookId id){this.id = id;} 
     public BookId getId(){return id;} 
     public void setId(BookId id) {this.id = id;} 
    } 

et mon BookId avec des getters/setters pour les champs, essentiellement toutes les colonnes du tableau.

public class BookId implements java.io.Serializable { 
     private static final long serialVersionUID = 1L; 
     private BookNum; 
     public BookId(){ } 
     public String getBookNumid() {return BookNum;} 
     public void setBookNum(String bookNum) {bookNum= bookNum;} 
     } 

Et mon HBM comme ci-dessous:

<hibernate-mapping> 
     <class name="com.bookStore.hibernate.dao.Book" table="BOOK" schema="ORG"> 
      <composite-id name="id" class="com.bookStore.hibernate.dao.BookId"> 
       <key-property name="BookNum" type="string"> 
        <column name="SH_BOOK_NUM" length="17" /> 
       </key-property> 
       <key-property name="DatePublished" type="date"> 
        <column name="SH_DATE_PUB" length="13" /> 
       </key-property> 
       <key-property name="Price" type="int"> 
        <column name="SH_PRICE" length="5" /> 
       </key-property> 
       <key-property name="Condition" type="string"> 
        <column name="SH_CONDITION" length="10" /> 
       </key-property> 
       <key-property name="BookBought " type="date"> 
        <column name="SH_BOOK_BOUGHT" length="13" /> 
       </key-property> 
      </composite-id> 
     </class> 
    </hibernate-mapping> 

Et je trouve qu'il est difficile lorsque je tente de itérer et l'affichage en vitesse. mon extrait de code comme ci-dessous:.

 #foreach($unApprovedBook in $unApprovedBookList) 
      <input type="text" id="bookNum" value="$unApprovedBook.getId().getBookNumid()"> 
     #set($i = $i + 1) 

En ce faisant, je vois unApprovedBook.getId $() getBookNumid() dans l'interface utilisateur si je change le code:

#foreach($unApprovedBook in $unApprovedBookList) 
<input type="text" id="bookNum" value="$unApprovedBook"> 
#set($i = $i + 1) 

Je vois: [Ljava.lang.Object; @ 3160316 dans l'interface utilisateur. S'il vous plaît laissez-moi savoir comment puis-je itérer mon javaobject dans Velocity.

[1]: https://i.stack.imgur.com/eBrYQ.jpg 

Répondre

0

Essayez cette façon:

Vous devez utiliser l'expression de la propriété $unApprovedBook.id.BookNum. Essayez de suivre la convention de dénomination Java.

<input type="text" id="bookNum" value="${unApprovedBook.id.BookNum}"> 
+0

Cela ne fonctionne pas non plus. J'ai changé mon code à: , et la sortie est: $ unApproved.id.IProflKey – BrinzN

+0

Ceci est techniquement itératif liste de liste objet – BrinzN

+0

Dans Velocity, vous pouvez obtenir des informations sur les objets en affichant leur classe java: '$ unApprovedBook.class.name'; Ceci est souvent très utile lorsque vous n'êtes pas sûr de ce qui se passe. –