2017-10-21 120 views
0

我目前正在使用Hibernate Framework项目从Netbeans IDE检索数据库中的值并将其显示在表结构中。我已经创建了与数据库表和控制器方法的映射来检索值。显示在JSP上通过查询返回的项目列表

我对hibernate框架相当陌生,不太清楚如何显示在我的Role.jsp视图中从RoleController.java传递的角色列表。在这方面的任何建议将不胜感激。

RoleController.java

package management; 

import javax.inject.Named; 
import javax.enterprise.context.SessionScoped; 
import java.io.Serializable; 
import javax.faces.bean.ManagedBean; 
import javax.faces.model.DataModel; 
import javax.faces.model.ListDataModel; 

/** 
* 
* @author Taro 
*/ 

@Named(value = "roleController") 
@ManagedBean 
@SessionScoped 
public class RoleController implements Serializable { 

    int employeeId; 
    DataModel roleTitles; 
    String roleTitle; 
    RoleHelper helper; 

    public RoleController() { 
     helper = new RoleHelper(); 
    } 

    public DataModel getRoleTitles() { 
     if (roleTitles == null) { 
      System.out.println("Successful"); 
      roleTitles = new ListDataModel(helper.getRoleTitles()); 
     } 
     return roleTitles; 
    } 
} 

Roles.jsp

<div class="content"> 
    <div class="container-fluid"> 
     <div class="row"> 
      <div class="col-md-8"> 
       <div class="card"> 
        <div class="header"> 
         <h4 class="title">Available Roles</h4> 
         <p class="category">A list of Role Titles</p> 
        </div> 
        <div class="content"> 
         <!--Display table of roles with an edit button against each role--> 
        </div> 
       </div> 
      </div> 
     ... 

RoleHelper.java

public class RoleHelper { 

    Session session = null; 

    public RoleHelper() { 
     this.session = HibernateUtil.getSessionFactory().getCurrentSession(); 
    } 

    /* 
    * Method : getRoleTitles 
    * @description Retrieve all the unique role titles 
    */ 
    public List getRoleTitles() { 
    List<Role> roleList = null; 
    try { 
     org.hibernate.Transaction tx = session.beginTransaction(); 
     Query q = session.createQuery ("select distinct role.title from Role as role"); 
     roleList = (List<Role>) q.list(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return roleList; 
    } 
... 

Role.hbm.xml

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
<!-- Generated Oct 21, 2017 1:12:44 PM by Hibernate Tools 4.3.1 --> 
<hibernate-mapping> 
    <class name="management.Role" table="ROLE" schema="APP" optimistic-lock="version"> 
     <id name="roleid" type="int"> 
      <column name="ROLEID" /> 
      <generator class="assigned" /> 
     </id> 
     <property name="employeeid" type="java.lang.Integer"> 
      <column name="EMPLOYEEID" /> 
     </property> 
     <property name="title" type="string"> 
      <column name="TITLE" length="40" /> 
     </property> 
    </class> 
</hibernate-mapping> 

Role.java

public class Role implements java.io.Serializable { 
    private int roleid; 
    private Integer employeeid; 
    private String title; 

    public Role() { 
    } 

    public Role(int roleid) { 
     this.roleid = roleid; 
    } 
    public Role(int roleid, Integer employeeid, String title) { 
     this.roleid = roleid; 
     this.employeeid = employeeid; 
     this.title = title; 
    } 

    public int getRoleid() { 
     return this.roleid; 
    } 

    public void setRoleid(int roleid) { 
     this.roleid = roleid; 
    } 
    public Integer getEmployeeid() { 
     return this.employeeid; 
    } 

    public void setEmployeeid(Integer employeeid) { 
     this.employeeid = employeeid; 
    } 
    public String getTitle() { 
     return this.title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 
} 

回答

0

看起来你是在项目中使用JSF,所以我建议使用这个框架的功能,用于构建UI。因此,您可以使用以下代码创建一个面孔index.xhtml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:f="http://java.sun.com/jsf/core" 
     xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://xmlns.jcp.org/jsf/facelets"> 

<h:head> 
    <title>JSF Example</title> 
</h:head> 
<h:body> 
    <h:dataTable value="#{roleController.getRoleTitles()}" var="roles"> 
     <h:column> 
      <f:facet name="header">id</f:facet> 
      #{roles.roleid} 
     </h:column> 
     <h:column> 
      <f:facet name="header">Title</f:facet> 
      #{roles.title} 
     </h:column> 
     <h:column> 
      <h:form> 
       <h:commandButton value="Delete" action="#{roleController.delete(roles.roleid)}"/> 
      </h:form> 
     </h:column> 
    </h:dataTable> 
</h:body> 
</html> 

这样的代码的结果如下。

enter image description here

我还重新设计一点点你RoleController.java所以它可以支持删除操作:

import com.mberazouski.stackoverflow.components.utils.RoleHelper; 
import com.mberazouski.stackoverflow.domain.Role; 

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 
import java.io.Serializable; 
import java.util.List; 

@ManagedBean 
@ViewScoped 
public class RoleController implements Serializable { 
    private static final long serialVersionUID = 9160307746480440676L; 

    private RoleHelper helper; 

    public RoleController() { 
     helper = new RoleHelper(); 
    } 

    public List<Role> getRoleTitles() { 
     return helper.getRoleTitles(); 
    } 

    public void delete(int id) { 
     helper.delete(id); 
    } 
} 

而且RoleHelper.java被重新设计,因为现在它返回Role对象的集合。

import com.mberazouski.stackoverflow.domain.Role; 
import com.mberazouski.stackoverflow.persistence.HibernateUtil; 
import org.hibernate.Query; 
import org.hibernate.Session; 
import org.hibernate.Transaction; 

import java.util.List; 

public class RoleHelper { 

    public List<Role> getRoleTitles() { 
     List<Role> roleList = null; 
     Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 
     Transaction transaction = session.beginTransaction(); 
     try { 
      Query q = session.createQuery("FROM Role"); 
      roleList = (List<Role>) q.list(); 
      transaction.commit(); 
     } catch (Exception e) { 
      transaction.rollback(); 
     } 
     return roleList; 
    } 

    public void delete(int roleid) { 
     Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 
     Transaction transaction = session.beginTransaction(); 
     try { 
      Query q = session.createQuery("FROM Role role WHERE role.roleid = " + roleid); 
      Role role = (Role) q.list().get(0); 
      session.delete(role); 
      transaction.commit(); 
     } catch (Exception e) { 
      transaction.rollback(); 
     } 
    } 
} 

另外我有一个关于你Role.hbm.xml我曾经increment发电机代替assigned一些线索,但我不知道哪个DB您使用了,所以可能increment不会被你的数据库服务器支持。

希望这些信息足以继续您的工作。