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