2013-03-31 12 views
1

有人可以幫我解決這個問題。我正嘗試在JSF2.0(xhtml頁面)中創建一個頁面,用於顯示,編輯和刪除UserGroup(一個MySQL數據庫表)的數據。我遇到的問題是數據實際上顯示爲UserGroup表的對象,而不是來自這些列的可讀值。我嘗試了各種可用於CRUD Web應用程序的示例解決方案,但沒有得到任何地方,當然我錯過了顯示和編輯行數據的整體理解。但是我的創建工作正常。我需要寫轉換器來顯示正確的值嗎?從MySqlDB表中顯示對象而不是真正的值的JSF數據表UserGroup

其他信息

  • 的Glassfish V3.1.2
  • JPA/EclipseLink的2.1
  • MySQLdb的
  • JSF2.0
  • 的Eclipse的Juno SR2

我們erGroup表

  1. ROWID(自動生成)
  2. 的groupId(在組表的外鍵組ID)
  3. 的用戶名(在用戶表的外鍵的用戶名)

輸出I現在正在進行

Users's and their group. 
Row Id Group Id    Username 
9   [email protected] [email protected] 
13  [email protected] [email protected] 

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> 

* 管Bean類

package beans; 

import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.List; 

import javax.annotation.PostConstruct; 
import javax.ejb.EJB; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.SessionScoped; 
//import javax.faces.model.DataModel; 
//import javax.faces.model.ListDataModel; 

import model.UserGroup; 

import ejb.UserGroupDaoBean; 

@ManagedBean(name = "userGroupManagedBean", eager = true) 
@SessionScoped 
public class UserGroupManageBean implements Serializable { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    @EJB 
    private UserGroupDaoBean uGDB; 
    // private DataModel<UserGroup> userGroup; 
    private List<UserGroup> userGroup; 
    private UserGroup currentUserGroup; 
    public String username; 

    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    public int getGroupId() { 
     return groupId; 
    } 

    public void setGroupId(int groupId) { 
     this.groupId = groupId; 
    } 

    public int groupId; 

    // public void setUserGroup(DataModel<UserGroup> userGroup) { 
    // this.userGroup = userGroup; 
    // } 

    public void setUserGroup(List<UserGroup> userGroup) { 
     this.userGroup = userGroup; 
    } 

    public UserGroup getCurrentUserGroup() { 
     return currentUserGroup; 
    } 

    @PostConstruct 
    public void init() { 

     getUserGroup(); 
    } 

    public List<UserGroup> getUserGroup() { 

     List<UserGroup> myAllUserGroups = new ArrayList<UserGroup>(
       uGDB.getAllUserGroups()); 

     return myAllUserGroups; 
    } 

    // public DataModel<UserGroup> getUserGroup() { 
    // userGroup = new ListDataModel<UserGroup>(uGDB.getAllUserGroups()); 
    // System.out.println(userGroup); 
    // return userGroup; 
    // } 

    // public String delete() { 
    // UserGroup myUserGroup = userGroup.getRowData(); 
    // uGDB.deleteUserGroup(myUserGroup); 
    // getUserGroup(); 
    // return 
    // "displayUserGroup.jsf?faces-redirect=true&amp;includeViewParams=true"; 
    // } 

    public String delete(UserGroup currentUserGroup) { 
     userGroup.remove(currentUserGroup); 
     getUserGroup(); 
     return "displayUserGroup.jsf?faces-redirect=true&amp;includeViewParams=true"; 
    } 

    // public String edit(){ 
    // currentUserGroup = userGroup.getRowData(); 
    // System.out.println("And the current user group data is:" + 
    // currentUserGroup); 
    // getUserGroup(); 
    // return 
    // "editUserGroup.jsf?faces-redirect=true&amp;includeViewParams=true"; 
    // } 

    public String save() { 

     uGDB.updateExistingUserGroup(currentUserGroup); 

     getUserGroup(); 
     return "displayUserGroup.jsf?faces-redirect=true&amp;includeViewParams=true"; 
    } 

    public String cancel() { 
     // getUserGroup(); 
     return "displayUserGroup.jsf?faces-redirect=true&amp;includeViewParams=true"; 
    } 

    public void setCurrentUserGroup(UserGroup currentUserGroup) { 
     this.currentUserGroup = currentUserGroup; 
    } 
} 

控制器類

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

用戶組POJO

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

} 

回答

1

您正在將userGroup的組和用戶對象傳遞給JSF,而不是值。您可能想要傳遞item.group.id和item.user.id或它們的等價物。

+0

對不起,我不明白。我是否必須通過用戶表中的組表和用戶名來傳遞組ID?我將如何做到這一點?因爲當前的對象是從UserGroup表中返回的,所以請您稍微詳細一點。 – sushantpandey

+0

這不是來自數據庫的原始數據,而是處理userGroup java對象的列表。因此,當您使用item.group時,您將得到一個組java對象 - 而不是您期望的外鍵數據庫值。您將需要更改對象模型,查詢或直接從用戶和組java對象中獲取要顯示的值。 – Chris

+0

我理解了它返回UserGroup類型的部分,但無法弄清楚如何將結果作爲普通數據庫值而不是UserGroup對象返回。你可以給我一些提示,可能是代碼片段或任何文章/鏈接我可以參考的形式。這將非常有幫助,因爲我完全被這個問題困住了。 – sushantpandey

相關問題