在表格中显示多对多关系的额外字段

时间:2012-12-19 14:18:52

标签: javascript jsp datatable many-to-many jstl

我一直在搜索,但没有找到任何解决方案来执行以下操作。

我正在尝试显示一个包含让我们说用户列表的表。显示来自用户的字段并不是什么大问题,但对于关联字段来说它更复杂。假设我有以下表格:User,Post和UserPosts,在UserPosts中我们有一个标志main来指示给定帖子是否是用户的主要位置。

在我的数据表中,我必须显示用户的信息,它表示用户表中的字段+他/她的主帖。

到目前为止,我有这样的事情:

<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,ajax?)

我是否以错误的方式思考,我应该使用关联类。我的意思是,检索main field = true的所有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>

对我来说似乎很奇怪,也许我错了。

1 个答案:

答案 0 :(得分:1)

如果我正确理解您的数据布局,您可以这样:

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

如果是这种情况,您可以像这样构建User对象:

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>