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

代わりに関連付けクラスを使用する必要があります。つまり、メイン フィールドが 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;
}

クエリは、「メイン」としてマークされている 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 に答える