5

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

我正在尝试显示一个包含比方说用户列表的表格。显示来自用户的字段并不是什么大问题,但关联字段更复杂。假设我有以下表格: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>

我觉得很奇怪,也许我错了。

4

1 回答 1

1

如果我正确理解了您的数据布局,您将得到如下信息:

数据结构

如果是这种情况,您可以像这样构造您的 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>
于 2013-02-16T00:19:57.960 回答