Jsf 2 JSF DataTable显示对象,而不是MySqlDB表用户组中的实际值

Jsf 2 JSF DataTable显示对象,而不是MySqlDB表用户组中的实际值,jsf-2,eclipselink,glassfish-3,Jsf 2,Eclipselink,Glassfish 3,有人能帮我解决这个问题吗。我试图创建一个页面,用于显示、编辑和删除JSF2.0(xhtml页面)中具有以下结构的用户组(MySQL DB表)中的数据。我遇到的问题是,数据实际上显示为UserGroup表的对象,而不是这些列中的可读值。我尝试了各种可用于CRUD web应用程序的示例解决方案,但没有取得任何成果,我肯定没有对显示和编辑行数据的总体理解。然而,我的创作很好。我需要写转换器来显示正确的值吗 其他信息 Glassfish v3.1.2 JPA/Eclipselink v2.1 MySQ

有人能帮我解决这个问题吗。我试图创建一个页面,用于显示、编辑和删除JSF2.0(xhtml页面)中具有以下结构的用户组(MySQL DB表)中的数据。我遇到的问题是,数据实际上显示为UserGroup表的对象,而不是这些列中的可读值。我尝试了各种可用于CRUD web应用程序的示例解决方案,但没有取得任何成果,我肯定没有对显示和编辑行数据的总体理解。然而,我的创作很好。我需要写转换器来显示正确的值吗

其他信息

  • Glassfish v3.1.2
  • JPA/Eclipselink v2.1
  • MySQLDB
  • JSF2.0
  • 日食朱诺SR2
用户组表

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!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:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets">
<f:metadata>
    <f:viewParam name="userId" value="#{loginBean.username}"></f:viewParam>
</f:metadata>
<ui:composition>
    <h:head>
        <meta http-equiv="Content-Type"
            content="text/html; charset=ISO-8859-1" />
        <h1>Users's and their group.</h1>
        <title>Displaying Users and their Groups</title>
    </h:head>
    <h:body>
        <h:form id="form">
            <h:dataTable value="#{userGroupManagedBean.userGroup}" var="item">
                <h:column>
                    <f:facet name="header"> Row Id</f:facet> #{item.rowId}
</h:column>
                <h:column>
                    <f:facet name="header"> Group Id</f:facet> #{item.group}
</h:column>
                <h:column>
                    <f:facet name="header"> Username</f:facet> #{item.user}
</h:column>
            </h:dataTable>
        </h:form>
    </h:body>
</ui:composition>
</html>
  • rowId(自动生成)
  • groupId(组表中组Id的外键)
  • 用户名(用户表中用户名的外键)
  • 我现在得到的输出

    Users's and their group.
    Row Id    Group Id              Username 
    9         model.Group@647d73bf  model.User@683a3423  
    13        model.Group@2192bac5  model.User@2823ecbb  
    
    XHTML代码

    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <!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:h="http://java.sun.com/jsf/html"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:ui="http://java.sun.com/jsf/facelets">
    <f:metadata>
        <f:viewParam name="userId" value="#{loginBean.username}"></f:viewParam>
    </f:metadata>
    <ui:composition>
        <h:head>
            <meta http-equiv="Content-Type"
                content="text/html; charset=ISO-8859-1" />
            <h1>Users's and their group.</h1>
            <title>Displaying Users and their Groups</title>
        </h:head>
        <h:body>
            <h:form id="form">
                <h:dataTable value="#{userGroupManagedBean.userGroup}" var="item">
                    <h:column>
                        <f:facet name="header"> Row Id</f:facet> #{item.rowId}
    </h:column>
                    <h:column>
                        <f:facet name="header"> Group Id</f:facet> #{item.group}
    </h:column>
                    <h:column>
                        <f:facet name="header"> Username</f:facet> #{item.user}
    </h:column>
                </h:dataTable>
            </h:form>
        </h:body>
    </ui:composition>
    </html>
    

    您将用户组的组和用户对象传递给JSF,而不是值。您可能希望传递item.group.id和item.user.id或其等效项。

    很抱歉,我不明白。我必须从组表传递组ID和从用户表传递用户名吗?我该怎么做?因为当前的对象是从UserGroup表返回的,所以请您详细说明一下。这不是来自数据库的原始数据,您处理的是UserGroup java对象列表。因此,当您使用item.group时,您得到的是一个组java对象,而不是您似乎期望的外键数据库值。您将需要更改对象模型、查询或直接从用户和组java对象获取要显示的值。我理解了返回UserGroup类型的对象的部分,但无法理解如何将结果作为普通数据库值而不是UserGroup对象返回。你能给我一些提示吗?可以是代码片段或者我可以参考的任何文章/链接。这将是非常大的帮助,因为我完全被困在这个。好的。搞定了!!:D产生了创建这个表的视图的想法。谢谢你给我指明了正确的方向!!:)
    package ejb;
    
    import java.util.List;
    
    import javax.ejb.LocalBean;
    import javax.ejb.Stateful;
    
    import javax.persistence.EntityManager;
    import javax.persistence.NoResultException;
    import javax.persistence.Query;
    
    import javax.persistence.PersistenceContext;
    
    import model.Group;
    import model.User;
    import model.UserGroup;
    
    @Stateful
    @LocalBean
    public class UserGroupDaoBean {
        @PersistenceContext(unitName = "myPU")
        private EntityManager entityManager;
    
        public UserGroupDaoBean() {
    
        }
    
        public UserGroup createNewUserGroup(int groupId, String username) {
    
            UserGroup newUserGrp = new UserGroup();
    
            User myUsr;
            myUsr = entityManager.find(User.class, username);
            newUserGrp.setUser(myUsr);
    
            Group myGrp;
            myGrp = entityManager.find(Group.class, groupId);
            newUserGrp.setGroup(myGrp);
    
            saveNewUsrGrp(newUserGrp);
            return newUserGrp;
        }
    
        private void saveNewUsrGrp(UserGroup usrGrp) {
            entityManager.persist(usrGrp);
            entityManager.flush();
        }
    
        public boolean checkUsertoGroup(String username, int groupId) {
    
            Group chkGrp;
            chkGrp = entityManager.find(Group.class, groupId);
    
            User chkUsr;
            chkUsr = entityManager.find(User.class, username);
    
            if (chkGrp != null) {
    
                if (chkUsr != null) {
    
                    try {
                        entityManager.createNamedQuery("findGroupsbyUser")
                                .setParameter("username", chkUsr)
                                .setParameter("groupId", chkGrp).getSingleResult();
                        System.out.println("UserGroup already exists");
                        return false;
                    } catch (NoResultException e) {
                        return true;
                    }
    
                }
                System.out.println("User doesn't exist");
                return false;
            }
            System.out.println("Group doesn't exist");
    
            return false;
    
        }
    
        public void deleteUserGroup(UserGroup userGroup) {
            userGroup = entityManager.merge(userGroup);
            entityManager.remove(userGroup);
        }
    
        public UserGroup update(UserGroup userGroup) {
    
            UserGroup myUserGroup = entityManager.merge(userGroup);
    
            return entityManager.merge(myUserGroup);
        }
    
        public UserGroup updateExistingUserGroup(UserGroup userGroup){
            UserGroup myExistingUsrGrp = update(userGroup);
            return myExistingUsrGrp;
        }
    
        @SuppressWarnings("unchecked")
        public List<UserGroup> getAllUserGroups() {
    
            try {
                Query query = entityManager.createNamedQuery("findAllUserGroup");
                List<UserGroup> result = (List<UserGroup>) query.getResultList();
    
                return result;
    
            } catch (NoResultException e) {
                System.out.println("No Result found");
                return null;
            }
        }
    
        public boolean validateGroup(User username) {
    
            Group groupId = entityManager.find(Group.class, 1);
    
            try {
                UserGroup myGroupId = (UserGroup) entityManager
                        .createNamedQuery("findAdminGroupId")
                        .setParameter("username", username)
                        .setParameter("groupId", groupId).getSingleResult();
    
                if (myGroupId != null) {
                    System.out.println("This user is admin!!!");
                    return true;
                }
    
            } catch (NoResultException e) {
                return false;
            }
    
            System.out.println("This user is not admin");
            return false;
        }
    
    package model;
    
    import java.io.Serializable;
    import javax.persistence.*;
    
    
    /**
     * The persistent class for the UserGroup database table.
     * 
     */
    @NamedQueries({
    
        @NamedQuery(name = "findGroupsbyUser", query = "Select ug.group from UserGroup ug where ug.user=:username AND ug.group=:groupId"),
    
        @NamedQuery(name = "findAllUserGroup", query="Select ug from UserGroup ug"),
    
        @NamedQuery(name = "findAdminGroupId", query = "Select ug from UserGroup ug where ug.user=:username AND ug.group=:groupId"),
    
    
    })
    @Entity
    @Table(name="usergroup")
    public class UserGroup implements Serializable {
        private static final long serialVersionUID = 1L;
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name="RowId" )
        private int rowId;
    
        //bi-directional many-to-one association to Group
        @ManyToOne
        @JoinColumn(name="groupId")
        private Group group;
    
        //bi-directional many-to-one association to User
        @ManyToOne
        @JoinColumn(name="username")
        private User user;
    
        public UserGroup() {
        }
    
        public int getRowId() {
            return this.rowId;
        }
    
        public void setRowId(int rowId) {
            this.rowId = rowId;
        }
    
        public Group getGroup() {
            return this.group;
        }
    
        public void setGroup(Group group) {
            this.group = group;
        }
    
        public User getUser() {
            return this.user;
        }
    
        public void setUser(User user) {
            this.user = user;
        }
    
    }