Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在表中显示从数据库检索到的值_Java_Sql_Hibernate_Foreach_Controller - Fatal编程技术网

Java 在表中显示从数据库检索到的值

Java 在表中显示从数据库检索到的值,java,sql,hibernate,foreach,controller,Java,Sql,Hibernate,Foreach,Controller,我对hibernate框架非常陌生,我正在netbeans IDE中从事hibernate框架项目。我有一个连接到项目的javadb,我需要获取每个员工的任务列表,并在中针对每个员工的姓名显示为项目符号列表。下表显示了正在使用EmployeeHelper类中的getEmployeeDetails方法获取的员工姓名和角色 问题-尽管我调用从控制器传递的resultTaskList参数,但任务列表始终为空。-我知道我必须对嵌套forloop中的任务执行if条件检查,该循环将列出任务,以便根据员工姓名

我对hibernate框架非常陌生,我正在netbeans IDE中从事hibernate框架项目。我有一个连接到项目的javadb,我需要获取每个员工的任务列表,并在
中针对每个员工的姓名显示为项目符号列表。下表显示了正在使用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上迭代以显示员工的每个任务的描述。因此,员工应该和角色有多方面的联系,和任务有多方面或多方面的联系。所以,请您提供一个关于我到底哪里出了问题的答案样本。提前谢谢,我的评论中已经有了所有内容。现在你需要开始阅读一本书,或者只是简单地阅读用户手册