私はフレームワークを休止するのが非常に難しく、netbeans IDEのHibernateフレームワークプロジェクトに取り組んでいます。私はプロジェクトに接続されているjavadbを持っており、各従業員のタスクリストを取得し、各従業員の名前に対して<td>
の箇条書きリストとして表示する必要があります。以下は、EmployeeHelperクラスのgetEmployeeDetails
メソッドを使用してフェッチされている従業員の名前と役割を表示するテーブルです。テーブルからデータベースから取得した値を表示
問題
- コントローラーから渡されたresultTaskList
パラメーターを呼び出しても、タスクリストは常に空です。
- 私は、従業員の名前に基づいてグループ化するタスクをリストするネストされたforloop内のタスクに対してif条件付きチェックを行う必要があることを知っています。しかし、jspページ内でif
を実行する方法がわかりません。
同じテーブル内に各従業員のタスクリストを表示する方法についてのご意見は高く評価されます。
この表では、各従業員に関連するタスクを対応する<td>
内の箇条書きリストとして作成したいと考えています。
Employee.jsp
...
<div class="content">
<!--Display table of roles with an edit button against each role-->
<form method="get" action="<%= request.getContextPath() %>/RoleController">
<br>
<table border ="2">
<thead class="thead-inverse">
<tr>
<th></th>
<th>Employee Name</th>
<th>Role</th>
<th>Tasks</th>
<th>Edit</th>
</tr>
</thead>
<tbody>
<c:forEach items="${result}" var="res">
<tr>
<th scope="row">
</th>
<td>
<c:out value="${res[0]}"></c:out>
</td>
<td>
<c:out value="${res[1]}"></c:out>
</td>
<td>
<c:out value="${resultTaskList[1]}"></c:out>
</td>
<td>
<input type="button" class="btn btn-info" value="Edit Role">
</td>
</tr>
</c:forEach>
</table>
</form>
</div>
...
EmployeeController.java
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
EmployeeHelper helper = new EmployeeHelper();
List<Employee> resultTaskList = helper.getEmployeeTasks();
request.setAttribute("resultTaskList", resultTaskList);
List<Employee> result = helper.getEmployeeDetails();
request.setAttribute("result", result);
request.getRequestDispatcher("Employee.jsp").forward(request, response);
}
EmployeeHelper.java
public class EmployeeHelper {
Session session = null;
public EmployeeHelper(){
this.session = HibernateUtil.getSessionFactory().openSession();
}
public List getEmployeeDetails(){
Transaction tx = this.session.beginTransaction();
List<Employee> employeeList = null;
try{
Query query = session.createQuery("select e.name, r.title from Employee as e, Role as r where e.employeeid=r.employeeid");
employeeList = (List<Employee>)query.list();
tx.commit();
}
catch(HibernateException ex){
ex.printStackTrace();
tx.rollback();
}
return employeeList;
}
public List getEmployeeTasks(){
Transaction tx = this.session.beginTransaction();
List<Employee> employeeTaskList = null;
try{
Query query = session.createQuery("select e.name, t.description from Employee as e, Role as r, Task as t, EmployeeTask as et where e.employeeid=r.employeeid and t.taskid=et.taskid and e.employeeid=et.employeeid");
employeeTaskList = (List<Employee>)query.list();
tx.commit();
}
catch(HibernateException ex){
ex.printStackTrace();
tx.rollback();
}
return employeeTaskList;
}
}
SQLクエリではなく、リストemployeeTaskListの
従業員情報**と**の両方を含むオブジェクトを保持するリストである結果を作成する必要があります。現時点では2つの無関係なリストがあります –
Hibernateは、リレーショナルデータベースをオブジェクトモデルにマッピングし、エンティティ間の(IDではなく)関連付けを完全に欠いています。問合せでは従業員を取得するだけで、JSPにはemployee.name、employee.role.titleが表示され、employee.tasksを反復して従業員の各タスクの説明が表示されます。したがって、従業員は、役割を持つManyToOneの関連付けと、タスクを持つOneToManyまたはManyToManyの関連付けを持つ必要があります。 –
私はかなり冬眠するのがとても新しいです。だから私がどこに間違っているのか正確に回答サンプルを提供することができます。事前に感謝 –