2017-10-21 6 views
0

Je travaille actuellement sur l'EDI NetBeans avec un projet Hibernate Framework pour extraire des valeurs de la base de données et les afficher dans une structure de table. J'ai créé le mappage avec les tables de base de données et la méthode de contrôleur pour récupérer les valeurs.Affichage de la liste des éléments renvoyés via une requête sur un JSP

Je suis relativement nouveau dans le framework hibernate et je ne suis pas sûr de savoir comment afficher la liste des rôles passés depuis le RoleController.java dans ma vue Role.jsp. Toutes les suggestions à cet égard seront très appréciées.

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; 
    } 
} 

Répondre

0

On dirait que vous utilisez JSF dans votre projet, donc je suggère d'utiliser les capacités de ce cadre pour la construction de l'interface utilisateur. Ainsi, vous pouvez créer un facelet index.xhtml avec le code suivant.

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

Le résultat de ce code sera le suivant.

enter image description here

J'ai aussi retravaillé un peu votre RoleController.java il peut prendre en charge l'action supprimer:

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); 
    } 
} 

également RoleHelper.java a été retravaillé parce que maintenant il retourne collection d'objets 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(); 
     } 
    } 
} 

En outre, j'ai quelques indices sur vous Role.hbm.xml où je increment générateur à la place assigned, mais je ne suis pas sûr que DB avez-vous utilisé, si possible increment ne sont pas pris en charge par votre serveur DB.

Espérons que cette information sera suffisante pour continuer votre travail.