Java 在表中显示从数据库检索到的值
我对hibernate框架非常陌生,我正在netbeans IDE中从事hibernate框架项目。我有一个连接到项目的javadb,我需要获取每个员工的任务列表,并在Java 在表中显示从数据库检索到的值,java,sql,hibernate,foreach,controller,Java,Sql,Hibernate,Foreach,Controller,我对hibernate框架非常陌生,我正在netbeans IDE中从事hibernate框架项目。我有一个连接到项目的javadb,我需要获取每个员工的任务列表,并在中针对每个员工的姓名显示为项目符号列表。下表显示了正在使用EmployeeHelper类中的getEmployeeDetails方法获取的员工姓名和角色 问题-尽管我调用从控制器传递的resultTaskList参数,但任务列表始终为空。-我知道我必须对嵌套forloop中的任务执行if条件检查,该循环将列出任务,以便根据员工姓名
中针对每个员工的姓名显示为项目符号列表。下表显示了正在使用EmployeeHelper类中的getEmployeeDetails
方法获取的员工姓名和角色
问题-尽管我调用从控制器传递的
resultTaskList
参数,但任务列表始终为空。-我知道我必须对嵌套forloop中的任务执行if条件检查,该循环将列出任务,以便根据员工姓名对其进行分组。但是我不知道如何在jsp页面中执行
if
如果您对如何在同一表格中显示每位员工的任务列表有任何建议,我们将不胜感激
在本表中,我打算将与每个员工相关的任务作为一个公告列表放在每个相应的
中
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);
}
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;
}
}
protectedvoidprocessrequest(HttpServletRequest请求,HttpServletResponse响应)
抛出ServletException、IOException{
EmployeeHelper=新EmployeeHelper();
List resultTaskList=helper.getEmployeeTasks();
setAttribute(“resultTaskList”,resultTaskList);
列表结果=helper.getEmployeeDetails();
setAttribute(“结果”,result);
getRequestDispatcher(“Employee.jsp”).forward(请求,响应);
}
EmployeeHelper.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);
}
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;
}
}
公共类EmployeeHelper{
会话=空;
公共雇员助手(){
this.session=HibernateUtil.getSessionFactory().openSession();
}
公共列表getEmployeeDetails(){
事务tx=this.session.beginTransaction();
List employeeList=null;
试一试{
Query Query=session.createQuery(“选择e.name,从Employee中选择r.title作为e,角色作为r,其中e.employeeid=r.employeeid”);
employeeList=(List)query.List();
tx.commit();
}
捕获(HibernateeException例外){
例如printStackTrace();
tx.回滚();
}
返回员工名单;
}
公共列表getEmployeeTasks(){
事务tx=this.session.beginTransaction();
List employeeTaskList=null;
试一试{
Query Query=session.createQuery(“选择e.name,t.description from Employee as e,Role as r,Task as t,EmployeeTask as et,其中e.employeeid=r.employeeid,t.taskid=et.taskid,e.employeeid=et.employeeid”);
employeeTaskList=(List)query.List();
tx.commit();
}
捕获(HibernateeException例外){
例如printStackTrace();
tx.回滚();
}
返回employeeTaskList;
}
}
在getEmployeeTasks()
方法中执行的SQL查询
请尝试以下代码,而不要使用List employeeTaskList,而是使用List and iterate循环并在employee List中设置值
public List getEmployeeTasks(){
Transaction tx = this.session.beginTransaction();
List<Employee> employeeTaskList = null;
try{
session.beginTransaction();
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");
List<Object[]> result = (List<Object[]>) query.list();
if (null != result && result.size() != 0) {
for (Object[] obj : result) {
//Set values over here
employeeTaskList.set.....
}
tx.commit();
}
}
catch(HibernateException ex){
ex.printStackTrace();
tx.rollback();
}
return employeeTaskList;
}
public List getEmployeeTasks(){
事务tx=this.session.beginTransaction();
List employeeTaskList=null;
试一试{
session.beginTransaction();
Query Query=session.createQuery(“选择e.name,t.description from Employee as e,Role as r,Task as t,EmployeeTask as et,其中e.employeeid=r.employeeid,t.taskid=et.taskid,e.employeeid=et.employeeid”);
List result=(List)query.List();
if(null!=result&&result.size()!=0){
对于(对象[]对象:结果){
//在这里设置值
employeeTaskList.set。。。。。
}
tx.commit();
}
}
捕获(HibernateeException例外){
例如printStackTrace();
tx.回滚();
}
返回employeeTaskList;
}
正如JB Nizet所建议的,这两个列表是不相关的。你还是可以这样做的
<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:forEach items="${resultTaskList}" var="resultTaskList">
<c:if test = "${res[0] == resultTaskList[0]}">
<c:out value="${resultTaskList[1]}"></c:out>
</c:if>
</c:forEach>
</td>
<td>
<input type="button" class="btn btn-info" value="Edit Role">
</td>
</tr>
</c:forEach>
希望这能有所帮助。您需要创建一个结果列表,其中包含一个对象,该对象包含员工信息和任务。目前,您有两个不相关的列表,您完全忽略了Hibernate的要点,即使用实体之间的关联(而不是ID)将关系数据库映射到对象模型。您的查询应该只检索employee,JSP应该显示employee.name、employee.role.title,并在employee.tasks上迭代以显示员工的每个任务的描述。因此,员工应该和角色有多方面的联系,和任务有多方面或多方面的联系。所以,请您提供一个关于我到底哪里出了问题的答案样本。提前谢谢,我的评论中已经有了所有内容。现在你需要开始阅读一本书,或者只是简单地阅读用户手册