2012-12-19 78 views
5

我一直在尋找一段時間,但沒有找到任何解決方案來做到以下幾點。顯示錶格內多對多關係的額外字段

我想顯示一個包含讓我們說用戶列表的表。顯示來自用戶的字段並不重要,但對於關聯字段而言更復雜。假設我有以下表格:User,Post和UserPosts,在UserPosts中,我們有一個標誌主要用於指示給定的帖子是否是用戶的主要位置。

在我的數據表中,我必須顯示用戶的信息,這意味着在用戶表+他/她的主要帖子中的字段。

到目前爲止,我有這樣的事情:

<table> 
    <thead> 
    <tr> 
     <th>name</th> 
     <th>FrstName</th> 
     <th>Age</th> 
     <th>Main position</th> 
     <th>Action</th> 
    </tr> 
     <tbody> 
      <c:forEach items="${listUsers}" var="user" varStatus="status"> 
      <tr> 
       <td><c:out value="${user.name}" /></td> 
       <td><c:out value="${user.firstName}" /></td> 
       <td><c:out value="${user.age}" /></td> 
       <td><c:out value="Position here" /></td> 
       <td> 
       Delete 
       <a href="/myAppli/user/${user.idUser}">Update</a> 
       </td> 
      </tr> 
      </c:forEach> 
     </tbody> 
</thead> 

我覺得位置,我將不得不從給定用戶的數據庫,主要位置在給定列中檢索,但隨後如何設置這個值(JavaScript的,阿賈克斯?)

我在想錯誤的方式,應該使用關聯類代替。我的意思是,檢索主場=真的所有UserPosts?然後遍歷userPosts,而不是用戶,在這種情況下,我都會有這樣的事情:

<c:forEach items="${listUserPosts}" var="userPost" varStatus="status"> 
     <tr> 
      <td><c:out value="${userPost.user.name}" /></td> 
      <td><c:out value="${userPost.user.firstName}" /></td> 
      <td><c:out value="${userPost.user.age}" /></td> 
      <td><c:out value="${userPost.post.postName}" /></td> 
      <td> 
      Delete 
      <a href="/myAppli/user/${userPost.user.idUser}">Update</a> 
      </td> 
     </tr> 
</c:forEach> 

似乎怪我,也許我錯了。

+0

爲什麼不添加到'$ {listUsers}' - 模型,在您的Controller中,已經是postName?或者,如果你不能或不想要,通過另一個單獨的模型與值?但是你必須確保forEach looporder不是隨機的。 – EricG

+0

我不確定我是否瞭解您的具體問題。 '用戶'是否已經擁有'List '屬性,您可以在嵌套循環中迭代? – BalusC

+0

@EricG我顯然不能做你提出的第一件事情,至於你的第二個提議,我會試一試。對不起,我直到現在纔回答。 – aslan

回答

1

如果我正確理解您的數據的佈局,你有這樣的事情:

Data structure http://s12.postimage.org/wbz89nz8t/Untitled_drawing.png

如果是這樣的話,你可以組織你的用戶對象是這樣的:

public class User { 
    private int id; 
    private String name; 
    private String firstName; 
    private int age; 
    private Position mainPosition; 
} 

並且您的查詢只需要在標記爲「main」的UserPosition上進行左連接。該UserPosition然後將加入正確的位置。然後你的JSP只需要檢查你的Position對象是否爲空。

<c:forEach items="${listUsers}" var="user" varStatus="status"> 
    <tr> 
    <td><c:out value="${user.name}" /></td> 
    <td><c:out value="${user.firstName}" /></td> 
    <td><c:out value="${user.age}" /></td> 
    <td> 
     <c:if test="empty ${user.position}"> 
     No main position 
     </c:if> 
     <c:if test="not empty ${user.position}"> 
     <c:out value="${user.position.title}" /> 
     </c:if> 
    </td> 
    <td> 
     Delete 
     <a href="/myAppli/user/${user.idUser}">Update</a> 
    </td> 
    </tr> 
</c:forEach> 
相關問題