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表
- ROWID(自動生成)
- 的groupId(在組表的外鍵組ID)
- 的用戶名(在用戶表的外鍵的用戶名)
輸出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&includeViewParams=true";
// }
public String delete(UserGroup currentUserGroup) {
userGroup.remove(currentUserGroup);
getUserGroup();
return "displayUserGroup.jsf?faces-redirect=true&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&includeViewParams=true";
// }
public String save() {
uGDB.updateExistingUserGroup(currentUserGroup);
getUserGroup();
return "displayUserGroup.jsf?faces-redirect=true&includeViewParams=true";
}
public String cancel() {
// getUserGroup();
return "displayUserGroup.jsf?faces-redirect=true&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;
}
}
對不起,我不明白。我是否必須通過用戶表中的組表和用戶名來傳遞組ID?我將如何做到這一點?因爲當前的對象是從UserGroup表中返回的,所以請您稍微詳細一點。 – sushantpandey
這不是來自數據庫的原始數據,而是處理userGroup java對象的列表。因此,當您使用item.group時,您將得到一個組java對象 - 而不是您期望的外鍵數據庫值。您將需要更改對象模型,查詢或直接從用戶和組java對象中獲取要顯示的值。 – Chris
我理解了它返回UserGroup類型的部分,但無法弄清楚如何將結果作爲普通數據庫值而不是UserGroup對象返回。你可以給我一些提示,可能是代碼片段或任何文章/鏈接我可以參考的形式。這將非常有幫助,因爲我完全被這個問題困住了。 – sushantpandey