有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java显示通过JSP上的查询返回的项列表

我目前正在使用Hibernate框架项目开发Netbeans IDE,以从数据库中检索值并将其显示在表结构中。我已经用数据库表和控制器方法创建了映射来检索值

我对hibernate框架非常陌生,不太确定如何在我的Role.jsp视图中显示从RoleController.java传递的角色列表。我们将非常感谢您在这方面提出的任何建议

角色控制器。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;
    }
}

角色。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;
    }
...

角色。哈佛商学院。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>

角色。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;
    }
}

共 (1) 个答案

  1. # 1 楼答案

    看起来您正在项目中使用JSF,所以我建议使用此框架的功能来构建UI。因此,您可以使用以下代码创建facelet 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生成器而不是assigned,但我不确定您使用了哪个数据库,因此您的数据库服务器可能不支持increment

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