PrimeFaces3.3データテーブルで作成されたデータテーブルが1つあります。このテーブルはデータベースから作成されます。
行の選択で、編集のために同様のフィールドに入力します。編集したら、データベースに書き込みたいです。同様に、テキストアイテムに新しいレコードを作成し、ユーザーがそれを保存すると、データテーブルを更新できるようにしたいと考えています。
データの選択は正常に機能しますが、追加/編集/削除の方法がわからない場合は、さまざまなエラーがさまざまなアプローチで発生し、Googleで見つけたすべての方法を試しました。これらのエラーは、論理エラーである場合もあれば、nullpointerexceptionまたはクラス開始エラーである場合もあります。私はjtable+crudについてネット上で利用可能な12以上の例を試しましたが、何もうまく機能していないようです。
たとえば、データはデータテーブルに表示され、テキストフィールドでの即時選択も行われますが、[追加]ボタンをクリックしても何も起こらず、[プロパティの編集]パネルのフィールドがクリアされることを期待していますNullPointerException
。テキストアイテムの値を変更して保存を押すと、値は書き込まれません。デバッグしたところ、エラーが発生しましたem.getTransaction().begin
。
もう一度使用するem.joinTransaction
と、commitステートメントでエラーがスローされます。私はJavaEEを初めて使用するので、ひどい間違いを犯していると思います。
誰かが同様のシナリオのいくつかの例を与えることができれば幸いです:jtable+バインドされたフィールド+追加/編集/削除操作。
以下は私のコードです:
@Entity
@Table(name = "users")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Users.findAll", query = "SELECT u FROM Users u"),
@NamedQuery(name = "Users.findByIduser", query = "SELECT u FROM Users u WHERE u.iduser = :iduser"),
@NamedQuery(name = "Users.findByLogin_Name", query = "SELECT u FROM Users u WHERE u.login_name = :login_name"),
@NamedQuery(name = "Users.findByFullName", query = "SELECT u FROM Users u WHERE u.fullName = :fullName"),
@NamedQuery(name = "Users.findByPassword", query = "SELECT u FROM Users u WHERE u.password = :password"),
@NamedQuery(name = "Users.authenticate", query = "SELECT u FROM Users u WHERE u.login_name = :login_name and u.password = :password and u.active=1"),
@NamedQuery(name = "Users.findByActive", query = "SELECT u FROM Users u WHERE u.active = :active"),
@NamedQuery(name = "Users.findByUserType", query = "SELECT u FROM Users u WHERE u.userType = :userType"),
@NamedQuery(name = "Users.findByEmail", query = "SELECT u FROM Users u WHERE u.email = :email"),
@NamedQuery(name = "Users.findByPhone", query = "SELECT u FROM Users u WHERE u.phone = :phone"),
@NamedQuery(name = "Users.findByCreated", query = "SELECT u FROM Users u WHERE u.created = :created"),
@NamedQuery(name = "Users.findByUpdated", query = "SELECT u FROM Users u WHERE u.updated = :updated")})
public class Users implements Serializable {
@Basic(optional = false)
@NotNull
@Column(name = "created")
@Temporal(TemporalType.TIMESTAMP)
private Date created;
@Basic(optional = false)
@NotNull
@Column(name = "updated")
@Temporal(TemporalType.TIMESTAMP)
private Date updated;
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO )
@Basic(optional = false)
@NotNull
@Column(name = "iduser")
private Integer iduser;
//getter & setters ....
@Stateless
public class UsersFacade extends AbstractFacade<Users> {
@PersistenceContext(unitName = "VUProjectPU")
private EntityManager em;
///////////////////////////////////////////////////////////////////////////////
@Override
protected EntityManager getEntityManager() {
return em;
}
///////////////////////////////////////////////////////////////////////////////
public UsersFacade() {
super(Users.class);
}
///////////////////////////////////////////////////////////////////////////////
public Users authenticate(String login_id, String pwd) {
List <Users> userList = new ArrayList();
Users user =null;
userList = em.createNamedQuery("Users.authenticate")
.setParameter("login_name", login_id)
.setParameter("password", pwd)
.getResultList();
if (userList.isEmpty()) {
return null;
}
else{
user = userList.get(0);
}
return user;
}
///////////////////////////////////////////////////////////////////////////////
public Users deactivateUser (Users u){
u.setActive(false);
return u;
}
///////////////////////////////////////////////////////////////////////////////
public Users activateUser (Users u){
u.setActive(true);
return u;
}
///////////////////////////////////////////////////////////////////////////////
public Users createAnalyst(Users u){
u.setActive(false);
u.setUserType("Analyst");
u.setCreated(new Date());
u.setUpdated(new Date());
em.persist(u);
em.flush();
em.refresh(u);
return u;
}
}
@ManagedBean
@ViewScoped
public class UsersList implements Serializable {
private List<Users> uList;
private Users selUser ;
private Users user;
private String operation;
private @EJB UsersFacade ufs;
private FacesContext context;
private FacesMessage msg;
private Boolean edit=false;
public UsersList(){
ufs = new UsersFacade();
}
public void getAllUsersList(){
uList=ufs.findAll();
}
public Boolean isEdit() {
return edit;
}
public void add(){
context = FacesContext.getCurrentInstance();
operation = "new";
edit=true;
selUser = new Users();
}
public void save(){
context = FacesContext.getCurrentInstance();
if (operation.equals("new")){
ufs.create(selUser);
}
ufs.save(selUser);
operation = null;
msg = new FacesMessage(FacesMessage.SEVERITY_INFO,"Success", "Record Saved");
context.addMessage(null, msg);
edit=false;
getAllUsersList(); //refresh table
}
public void delete(Users u){
context = FacesContext.getCurrentInstance();
ufs.delete(u);
msg = new FacesMessage(FacesMessage.SEVERITY_INFO,"Success", "Record Deleted");
context.addMessage(null, msg);
}
public void refresh(){
context = FacesContext.getCurrentInstance();
getAllUsersList();
msg = new FacesMessage(FacesMessage.SEVERITY_INFO,"Success", "Data Refreshed");
context.addMessage(null, msg);
}
public List<Users> getuList() {
uList = ufs.findAll();
return uList;
}
public void setuList(List<Users> uList) {
this.uList = uList;
}
public Users getSelUser() {
return selUser;
}
public void setSelUser(Users selUser) {
this.selUser = selUser;
}
public void onRowSelect(SelectEvent event) {
edit=true;
context = FacesContext.getCurrentInstance();
msg = new FacesMessage("User Selected", ((Users) event.getObject()).getLogin_name());
context.addMessage(null, msg);
}
public void onRowUnSelect(UnselectEvent event) {
edit=false;
context = FacesContext.getCurrentInstance();
msg = new FacesMessage("User Unselected", ((Users) event.getObject()).getLogin_name());
context.addMessage(null, msg);
}
public Users getUser() {
return user;
}
}
below is user.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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core">
<body>
<ui:composition template="./../../WEB-INF/Templates/Template.xhtml">
<ui:define name="menu">
</ui:define>
<ui:define name="content">
<h:form id="form">
<p:growl id="growl" showDetail="true"/>
<p:dataTable id="utable" var="users"
value="#{usersList.getuList()}"
selection="#{usersList.selUser}"
rowKey="#{users.iduser}"
selectionMode="single"
paginator="true" rows="5"
paginatorPosition="bottom"
editable="true"
>
<p:ajax event="rowSelect" listener="#{usersList.onRowSelect}" update=":form:display :form:growl" />
<p:ajax event="rowUnselect" listener="#{usersList.onRowUnSelect}" update=":form:growl"/>
<f:facet name="header">
List of Users
</f:facet>
<p:column id="login" sortBy ="#{users.login_name}">
<f:facet name="header">Login</f:facet>
<h:outputText value="#{users.login_name}" />
</p:column>
<p:column id="fullname" sortBy ="#{users.fullName}">
<f:facet name="header">User Name</f:facet>
<h:outputText value="#{users.fullName}" />
</p:column>
<p:column id="email" sortBy ="#{users.email}">
<f:facet name="header">E-mail</f:facet>
<h:outputText value="#{users.email}" />
</p:column>
<p:column id="phone" sortBy ="#{users.phone}">
<f:facet name="header">Phone</f:facet>
<h:outputText value="#{users.phone}" />
</p:column>
<p:column id="created" sortBy ="#{users.created}">
<f:facet name="header">Created On</f:facet>
<h:outputText value="#{users.created}" />
</p:column>
<p:column id="active" sortBy ="#{users.active}">
<f:facet name="header">Active</f:facet>
<h:outputText value="#{users.active}" />
</p:column>
<p:column id="userType" sortBy ="#{users.userType}">
<f:facet name="header">User Type</f:facet>
<h:outputText value="#{users.userType}" />
</p:column >
</p:dataTable>
<p:panel header="Edit User Properties">
<h:panelGrid id="display" columns="6" cellpadding="4" >
<h:outputText value="Login:" />
<p:inputText readonly="#{usersList.edit}"
value="#{usersList[usersList.edit ? 'user' : 'selUser'].login_name}" />
<h:outputText value="Password:" />
<p:inputText readonly="#{usersList.edit}"
value="#{usersList[usersList.edit ? 'user' : 'selUser'].password}" />
<h:outputText value="User Name:" />
<p:inputText readonly="#{usersList.edit}"
value="#{usersList[usersList.edit ? 'user' : 'selUser'].fullName}" />
<h:outputText value="E-mail:" />
<p:inputText readonly="#{usersList.edit}"
value="#{usersList[usersList.edit ? 'user' : 'selUser'].email}" />
<h:outputText value="Phone:" />
<p:inputText readonly="#{usersList.edit}"
value="#{usersList[usersList.edit ? 'user' : 'selUser'].phone}" />
<h:outputText value="User Type:" />
<p:inputText readonly="#{usersList.edit}"
value="#{usersList[usersList.edit ? 'user' : 'selUser'].userType}" />
<h:outputText value="Active:" />
<p:selectBooleanCheckbox
value="#{usersList[usersList.edit ? 'user' : 'selUser'].active}"/>
</h:panelGrid>
<h:panelGrid id="command" columns="6" cellpadding="4" >
<p:commandButton id="new" value="New" actionListener="#{usersList.add()}"
update="result,utable,display"
rendered="#{usersList.edit}}">
</p:commandButton>
<p:commandButton id="save" value="Save" actionListener="#{usersList.save()}" update="result utable">
</p:commandButton>
<p:commandButton id="delete" value="Delete" actionListener="#{usersList.delete()}" update="result utable">
</p:commandButton>
<p:commandButton id="refresh" value="Refresh" actionListener="#{usersList.refresh()}" update="result utable">
</p:commandButton>
</h:panelGrid>
<p:messages id="result" showDetail="true" autoUpdate="true"/>
</p:panel>
</h:form>
</ui:define>
</ui:composition>
</body>
</html>