【发布时间】:2013-12-30 13:49:15
【问题描述】:
我的代码有关于向数据库插入新记录的问题。这是我的代码。希望有人建议我。
客户
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>
当我在调试模式下运行我的代码时,我输入的值(例如名字、姓氏、dob、电子邮件)返回 null。我尝试更改为 SessionScope 但没有任何改变。我正在使用 PrimesFace 3.5、Glassfish 3.1、Hibernate 和 JSF 2.0
【问题讨论】:
-
我想你想把这个 immediate="true" 放在 CANCEL 按钮上,而不是放在 OK 按钮上。
-
@Gimby 现在我可以接收我输入的值但 custId 仍然是 0,custId 是身份字段,为什么会这样?
-
因为您的数据库或客户实体的休眠配置有误。
标签: java hibernate jsf jsf-2 primefaces