gpt4 book ai didi

java - 无法使用 jsf 和 hibernate 插入数据库。对象返回null

转载 作者:行者123 更新时间:2023-12-01 13:43:08 26 4
gpt4 key购买 nike

我的代码在向数据库插入新记录时遇到问题。这是我的代码。希望有人建议我。

客户

public class Customer  implements java.io.Serializable {
private int cusId;
private String firstName;
private String lastName;
private String email;
private Serializable dob;

public Customer() {
}

public Customer(int cusId, String firstName, String lastName, String email, Serializable dob) {
this.cusId = cusId;
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
this.dob = dob;
}

public int getCusId() {
return this.cusId;
}

public void setCusId(int cusId) {
this.cusId = cusId;
}
public String getFirstName() {
return this.firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return this.lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return this.email;
}

public void setEmail(String email) {
this.email = email;
}
public Serializable getDob() {
return this.dob;
}

public void setDob(Serializable dob) {
this.dob = dob;
}
}

customerBean

@ManagedBean(name="customerBean")
@RequestScoped
public class customerBean implements Serializable {

private Customer selectedCustomer;
private List<Customer> customer;

/** Creates a new instance of customerBean */
public customerBean() {
selectedCustomer = new Customer();
customer = new ArrayList<Customer>();
}

public List<Customer> getCustomer() {
CustomersDao cust_dao = new CustomersDao();
customer = cust_dao.findAll();
return customer;
}

public Customer getSelectedCustomer() {
return selectedCustomer;
}

public void setSelectedCustomer(Customer selectedCustomer) {
this.selectedCustomer = selectedCustomer;
}

public void btnCreate(){
CustomersDao cust_create = new CustomersDao();
String msg;
if(cust_create.createCustomer(selectedCustomer)){
msg = "Created Successfully!";
}else{
msg = "Error. Please check again!";
}
FacesMessage massage = new FacesMessage(FacesMessage.SEVERITY_INFO, msg, null);
FacesContext.getCurrentInstance().addMessage(null, massage);
}
}

CustomersDao

public class CustomersDao {
public boolean createCustomer(Customer customer){
boolean flag;
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
try{
session.beginTransaction();
session.save(customer);
session.beginTransaction().commit();
flag = true;
}catch(Exception e){
flag = false;
session.beginTransaction().rollback();
}
return flag;
}
}

xhtml

<p:growl id="msgs" showDetail="true" />
<h:form>
<p:commandButton id="btnCreate" oncomplete="createDialog.show()" icon="ui-icon-search" title="Create" value="New Customer" update=":formCreate" />
</h:form>
<h:form id="formCreate">
<p:dialog header="Create New Customer" widgetVar="createDialog" resizable="false" id="createDlg" showEffect="fade" hideEffect="explode">

<h:panelGrid id="display" columns="2" cellpadding="4" style="margin:0 auto;">

<h:outputText value="First Name: " />
<h:inputText value="#{customerBean.selectedCustomer.firstName}"/>

<h:outputText value="Last Name: " />
<h:inputText value="#{customerBean.selectedCustomer.lastName}" />

<h:outputText value="DOB: " />
<h:inputText value="#{customerBean.selectedCustomer.dob}" />

<h:outputText value="Email: " />
<h:inputText value="#{customerBean.selectedCustomer.email}" />

<f:facet name="footer">
<p:separator />
<p:commandButton id="btnOK" oncomplete="createDialog.hide()" immediate="true" action="#{customerBean.btnCreate}" icon="ui-icon-search" title="Save" value="Save" update=":formData, :msgs" />
<p:commandButton id="btnCancel" oncomplete="createDialog.hide()" icon="ui-icon-search" title="Cancel" value="Cancel" />
</f:facet>
</h:panelGrid>

</p:dialog>
</h:form>

当我在 Debug模式下运行代码时,我输入的值(例如名字、姓氏、出生日期、电子邮件)将返回null。我尝试更改 SessionScope 但没有任何变化。我正在使用 PrimesFace 3.5、Glassfish 3.1、Hibernate 和 JSF 2.0

最佳答案

首先,immediate您的保存按钮中的属性被滥用。只需删除它即可让 JSF 生命周期以普通方式发生。

其次,您的取消按钮不会调用任何服务器端操作,因此通过切换到 <p:button> 让它成为一个普通的按钮。 ,或定义 type="button"在您的<p:commandButton>上.

最后,您开始三次新交易。从 session.beginTransaction() 中删除第二次和第三次调用至session.getTransaction() ,否则您将破坏旧事务(并且不提交它)。

关于java - 无法使用 jsf 和 hibernate 插入数据库。对象返回null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20538617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com