Java 更新primefaces数据表中的记录
我正在使用jsf hibernate spring primefaces的集成。 我想更新一个记录。但我的代码不起作用。插入和删除操作很好。我没有错。请帮我写正确的代码。 personeldao.javaJava 更新primefaces数据表中的记录,java,hibernate,jsf,jakarta-ee,primefaces,Java,Hibernate,Jsf,Jakarta Ee,Primefaces,我正在使用jsf hibernate spring primefaces的集成。 我想更新一个记录。但我的代码不起作用。插入和删除操作很好。我没有错。请帮我写正确的代码。 personeldao.java public class PersonelDao implements IPersonelDao { private SessionFactory sessionFactory; public SessionFactory getSessionFactory() { return
public class PersonelDao implements IPersonelDao {
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
public void updatePersonel(Personel personel) {
getSessionFactory().getCurrentSession().update(personel);
}
public void deletePersonel(Personel personel) {
getSessionFactory().getCurrentSession().delete(personel);
}
PersonelService.java
@Transactional(readOnly=true)
public class PersonelService implements IPersonelService{
IPersonelDao personeldao;
public IPersonelDao getPersoneldao() {
return personeldao;
}
public void setPersoneldao(IPersonelDao personeldao) {
this.personeldao = personeldao;
}
@Transactional(readOnly=true)
public void updatePersonel(Personel personel){
getPersoneldao().updatePersonel(personel);
}
@Transactional(readOnly=false)
public void deletePersonel(Personel personel) {
getPersoneldao().deletePersonel(personel);
}
PersonelBean.java
@ManagedBean(name="personelMB")
@RequestScoped
public class PersonelBean implements Serializable{
private static final long serialVersionUID = 1L;
@ManagedProperty(value="#{PersonelService}")
IPersonelService personelservice;
List<Personel> personelList;
private int personel_id;
private String pname;
private String pfamily;
private String paddress;
private String pphone;
//getter and setter
public void deletePersonel(int personel_id){
Personel personel=(Personel)personelservice.getPersonelId(personel_id);
getPersonelservice().deletePersonel(personel);
}
public void updatePersonel(RowEditEvent event){
Personel personel = (Personel)event.getObject();
getPersonelservice().updatePersonel(personel);
//getDataFromDatabase();
}
}
@ManagedBean(name=“personelMB”)
@请求范围
公共类PersonelBean实现可序列化{
私有静态最终长serialVersionUID=1L;
@ManagedProperty(value=“#{PersonelService}”)
IPersonelService个人服务;
列出个人主义者;
私人内部人员id;
私有字符串pname;
私家;
私家围裙;
专用字符串pphone;
//接二连三
public void deletePersonel(内部人员id){
Personel Personel=(Personel)personelservice.getPersonelId(Personel_id);
getPersonelservice().deletePersonel(personel);
}
public void updatePersonel(RowEditEvent事件){
Personel Personel=(Personel)event.getObject();
getPersonelservice().updatePersonel(personel);
//getDataFromDatabase();
}
}
personel.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 dir="rtl"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:fn="http://java.sun.com/jsp/jstl/functions"
>
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>اطلاعات پرسنلی</title>
</h:head>
<h:body>
<h1>اضافه کردن پرسنل جدید</h1>
<h:form>
<h:panelGrid columns="4" >
شماره پرسنلی :
<h:inputText id="id" value="#{personelMB.personel_id}"
size="20" required="true"
label="id" >
</h:inputText>
<br></br>
نام :
<h:inputText id="name" value="#{personelMB.pname}"
size="20" required="true"
label="Name" >
</h:inputText>
نام خانوادگی:
<h:inputText id="family" value="#{personelMB.pfamily}"
size="20" required="true"
label="family" >
</h:inputText>
آدرس :
<h:inputTextarea id="address" value="#{personelMB.paddress}"
cols="30" rows="10" required="true"
label="Address" >
</h:inputTextarea>
تلفن:
<h:inputText id="tel" value="#{personelMB.pphone}"
size="20" required="true"
label="tel" >
</h:inputText>
</h:panelGrid>
<h:commandButton value="درج اطلاعات" action="#{personelMB.addPersonel()}" />
</h:form>
<h2>مشاهده اطلاعات پرسنل</h2>
<h:form prependId="false">
<p:dataTable id="pdataTable" var="personel" value="#{personelMB.personelList}" rowKey="#{personelMB.personel_id}" editable="true"
>
<p:ajax event="rowEdit" update="@form" listener="#{personelMB.updatePersonel}"/>
<f:facet name="header">
اطلاعات پرسنل
</f:facet>
<p:column>
<f:facet name="header">
شماره پرسنلی
</f:facet>
<h:outputText value="#{personel.personel_id}" />
<f:facet name="footer">
کدملی
</f:facet>
</p:column>
<p:column headerText="نام">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{personel.pname}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{personel.pname}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="نام خانوادگی">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{personel.pfamily}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{personel.pfamily}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="آدرس">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{personel.paddress}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{personel.paddress}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="تلفن">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{personel.pphone}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{personel.pphone}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="حذف">
<f:facet name="حذف">
<h:outputText value="" />
</f:facet>
<p:commandButton icon="ui-icon-trash" title="حذف"
actionListener="#{personelMB.deletePersonel(personel.personel_id)}" update="@form" ajax="true"/>
</p:column>
<p:column headerText="ويرايش">
<p:rowEditor />
</p:column>
<f:facet name="footer">
تعداد رکورد#{fn:length(personelMB.getPersonelList())} میباشد.
</f:facet>
</p:dataTable>
</h:form>
</h:body>
</html>
اطلاعات پرسنلی
اضافه کردن پرسنل جدید
شماره پرسنلی :
نام :
نام خانوادگی:
آدرس :
تلفن:
مشاهده اطلاعات پرسنل
اطلاعات پرسنل
شماره پرسنلی
کدملی
长度(personelMB.getPersonelList())}。
personel.java
@Entity
@Table(name="TBLPERSONEL")
public class Personel {
@Id
@Column(name="PERSONEL_ID")
private int personel_id;
@Column(name="PNAME")
private String pname;
@Column(name="PFAMILY")
private String pfamily;
@Column(name="PADDRESS")
private String paddress;
@Column(name="PPHONE")
private String pphone;
@OneToOne
@PrimaryKeyJoinColumn
private Manager manager;
@OneToMany(mappedBy="personel")
private Set<Stufftransfer> stufftransfers;
public Personel(){
}
public Set<Stufftransfer> getStufftransfers() {
return stufftransfers;
}
public void setStufftransfers(Set<Stufftransfer> stufftransfers) {
this.stufftransfers = stufftransfers;
}
public Personel(int personel_id, String pname, String pfamily, String paddress,
String pphone) {
super();
this.personel_id = personel_id;
this.pname = pname;
this.pfamily = pfamily;
this.paddress = paddress;
this.pphone = pphone;
}
//getter and setter
@实体
@表(name=“TBLPERSONEL”)
公营人员{
@身份证
@列(name=“PERSONEL\u ID”)
私人内部人员id;
@列(name=“PNAME”)
私有字符串pname;
@列(name=“PFAMILY”)
私家;
@列(name=“PADDRESS”)
私家围裙;
@列(name=“PPHONE”)
专用字符串pphone;
@奥内托内
@PrimaryKeyJoinColumn
私人经理;
@OneToMany(mappedBy=“personel”)
私人转让;
公共人员{
}
公共集getStufftransfers(){
退货和转帐;
}
公共作废setStufftransfers(Set stufftransfers){
this.stufftransfers=stufftransfers;
}
公共人员(内部人员id、字符串pname、字符串PFFAMILY、字符串paddress、,
字符串(pphone){
超级();
this.personel\u id=personel\u id;
this.pname=pname;
this.pffamily=pffamily;
this.paddress=paddress;
this.pphone=pphone;
}
//接二连三
p:commandButton
代替h:commandButton
p:commandButton
对不起,我误解了这个问题 正确答案是: 将更新方法更改为:
public void updatePersonel(RowEditEvent event){
Personel updated = (Pesonel)event.getObject();
//this is the updated value from the dataTable, get the entity from db and do the update
}
还有一件事:不要更新ajax事件上的行,因为您没有在更新方法中更新personelList
。这意味着rowEdit
ajax事件必须如下所示:
<p:ajax event="rowEdit" listener="#{personelMB.updatePersonel}"/>
p:commandButton
代替h:commandButton
p:commandButton
对不起,我误解了这个问题 正确答案是: 将更新方法更改为:
public void updatePersonel(RowEditEvent event){
Personel updated = (Pesonel)event.getObject();
//this is the updated value from the dataTable, get the entity from db and do the update
}
还有一件事:不要更新ajax事件上的行,因为您没有在更新方法中更新personelList
。这意味着rowEdit
ajax事件必须如下所示:
<p:ajax event="rowEdit" listener="#{personelMB.updatePersonel}"/>
更改ManagedBean的updatePersonel()方法,如下所示
public void updatePersonel(int personel_id,String pname,String pfamily,String paddress,String pphone){
Personel personel = new Personel();
personel=(Personel)personelservice.getPersonelId(personel_id);
if(personal != null) {
personel.setPaddress(getPaddress());
personel.setPersonel_id(getPersonel_id());
personel.setPfamily(getPfamily());
personel.setPname(getPname());
personel.setPphone(getPphone());
getPersonelservice().updatePersonel(personel_id, pname, pfamily, paddress, pphone);
}
}
更改ManagedBean的updatePersonel()方法,如下所示
public void updatePersonel(int personel_id,String pname,String pfamily,String paddress,String pphone){
Personel personel = new Personel();
personel=(Personel)personelservice.getPersonelId(personel_id);
if(personal != null) {
personel.setPaddress(getPaddress());
personel.setPersonel_id(getPersonel_id());
personel.setPfamily(getPfamily());
personel.setPname(getPname());
personel.setPphone(getPphone());
getPersonelservice().updatePersonel(personel_id, pname, pfamily, paddress, pphone);
}
}
你能为Personel类添加代码吗?当你说更新不起作用时,实际发生了什么?是否引发异常?@JamesB,我没有异常。我的密码不起作用。当我单击primefaces的行编辑器并更新记录时,它不起作用,也没有更新。您是否直接检查了数据库以确认正在更新的个人行的状态?@JamesB,该行在数据库中没有更新。我认为我的更新代码不正确。我不知道。你能为Personel类添加代码吗?当你说更新不起作用时,实际发生了什么?是否引发异常?@JamesB,我没有异常。我的密码不起作用。当我单击primefaces的行编辑器并更新记录时,它不起作用,也没有更新。您是否直接检查了数据库以确认正在更新的个人行的状态?@JamesB,该行在数据库中没有更新。我认为我的更新代码不正确。我不知道,侯赛因,你能帮我吗?这几天我在努力更新。我是javaee的新手。我试过了,但没用。public void updatePersonel(RowEditEvent事件){Personel Personel=(Personel)event.getObject();getPersonelservice().updatePer