【问题标题】:Deleting a row in integration of spring hibernate jsfspring hibernate jsf集成中删除一行
【发布时间】:2012-07-14 12:55:43
【问题描述】:

根据我的previous question,我可以添加客户,但我不能删除一行。

如何编写删除行的正确代码?

我在 eclipse 中使用 hibernate 4.1.4 和 spring 3.1 和 jsf 2.0 和 maven 3。

Customermanagedbean.java

@ManagedBean(name="CustomerMB")
@RequestScoped
public class Customermanagedbean implements Serializable{
@ManagedProperty(value="#{CustomerBoImpl}")
ICustomerBo customerBoImpl;
List<Customer> CustomerList;
public int customerId;
public String name;
public String address;
public String createdDate;



public ICustomerBo getCustomerBoImpl() {
    return customerBoImpl;
}
public void setCustomerBoImpl(ICustomerBo customerBoImpl) {
    this.customerBoImpl = customerBoImpl;
}

public List<Customer> getCustomerList() {
    CustomerList=new ArrayList<Customer>();
    CustomerList.addAll(getCustomerBoImpl().findAllCustomer());

    return CustomerList;
}



public void setCustomerList(List<Customer> customerList) {
    CustomerList = customerList;
}
public int getCustomerId() {
    return customerId;
}
public void setCustomerId(int customerId) {
    this.customerId = customerId;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getAddress() {
    return address;
}
public void setAddress(String address) {
    this.address = address;
}
public String getCreatedDate() {
    return createdDate;
}
public void setCreatedDate(String createdDate) {
    this.createdDate = createdDate;
}
//add a new customer data into database
public String addCustomer(){

    Customer cust = new Customer();
    cust.setCustomerId(getCustomerId());
    cust.setName(getName());
    cust.setAddress(getAddress());
cust.setCreatedDate(getCreatedDate());

    getCustomerBoImpl().addCustomer(cust);


    clearForm();

    return "";
}

//clear form values
private void clearForm(){
        setName("");
    setAddress("");
    setCreatedDate("");
}
public String deleteCustomer(Customer customer){
    getCustomerBoImpl().deleteCustomer(customer);

    return "";


}

}

CustomerDaoImpl.java

public class CustomerDaoImpl implements ICustomerDao{
    private SessionFactory sessionFactory;
    public SessionFactory getSessionFactory() {
        return sessionFactory;}
    public void setSessionFactory(SessionFactory sessionFactory) {
         this.sessionFactory = sessionFactory;
    }

    public void addCustomer(Customer customer){
        sessionFactory.openSession();
        getSessionFactory().getCurrentSession().save(customer);

    }

    public void updateCustomer(Customer customer){
        sessionFactory.openSession();
        getSessionFactory().getCurrentSession().update(customer);
    }

    public void deleteCustomer(Customer customer){
        sessionFactory.openSession();
        getSessionFactory().getCurrentSession().delete(customer);
    }


    public List<Customer> findAllCustomer(){
        sessionFactory.openSession();

        List list = getSessionFactory().getCurrentSession

().createQuery("from Customer").list();
        return list;

    }
}

CustomerBoImpl.java

@Transactional(readOnly = true)
public class CustomerBoImpl implements ICustomerBo{
 @Autowired
    ICustomerDao customerDaoImpl;



    public ICustomerDao getCustomerDaoImpl() {
        return customerDaoImpl;
    }

    public void setCustomerDaoImpl(ICustomerDao customerDaoImpl) {
        this.customerDaoImpl = customerDaoImpl;
    }

@Transactional(readOnly = false)
@Override
    public void addCustomer(Customer customer){

        getCustomerDaoImpl().addCustomer(customer);

    }

@Transactional(readOnly = false)
@Override
    public void updateCustomer(Customer customer){
        getCustomerDaoImpl().updateCustomer(customer);
    }

@Transactional(readOnly = false)
@Override
    public void deleteCustomer(Customer customer){
        getCustomerDaoImpl().deleteCustomer(customer);
    }

@Override
    public List<Customer> findAllCustomer(){

        return getCustomerDaoImpl().findAllCustomer();
    }
}

default.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:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      >
    <h:head>
        <h:outputStylesheet library="css" name="table-style.css"  />
    </h:head>

    <h:body>



        <h:dataTable value="#{CustomerMB.getCustomerList()}" var="c"
                styleClass="order-table"
                headerClass="order-table-header"
                rowClasses="order-table-odd-row,order-table-even-row"
            >

            <h:column>
                <f:facet name="header">
                    Customer ID
                </f:facet>
                    #{c.customerId}
            </h:column>

            <h:column>
                <f:facet name="header">
                    Name
                </f:facet>
                    #{c.name}
            </h:column>

            <h:column>
                <f:facet name="header">
                    Address
                </f:facet>
                    #{c.address}
            </h:column>

            <h:column>
                <f:facet name="header">
                    Created Date
                </f:facet>
                    #{c.createdDate}

            </h:column>
             <h:column>

    <f:facet name="header">Action</f:facet>

    <h:commandButton value="Delete" action="#{CustomerMB.deleteCustomer(c)}" />

           </h:column>

        </h:dataTable>

        <h2>Add New Customer</h2>
        <h:form>

            <h:panelGrid columns="3">
                Customer ID : 
                <h:inputText id="customerId" value="#{CustomerMB.customerId}" 
                    size="20" required="true"
                    label="customerId" >
                </h:inputText>

                <h:message for="customerId" style="color:red" />
                Name : 
                <h:inputText id="name" value="#{CustomerMB.name}" 
                    size="20" required="true"
                    label="Name" >
                </h:inputText>

                <h:message for="name" style="color:red" />

                Address : 
                <h:inputTextarea id="address" value="#{CustomerMB.address}" 
                    cols="30" rows="10" required="true"
                    label="Address" >
                </h:inputTextarea>

                <h:message for="address" style="color:red" />

created Date : 
                <h:inputTextarea id="createdDate" value="#{CustomerMB.createdDate}" 
                    size="20" required="true"
                    label="createdDate" >
                </h:inputTextarea>

            </h:panelGrid>

            <h:commandButton value="Submit" action="#{CustomerMB.addCustomer()}" />

        </h:form>

    </h:body>

</html>

【问题讨论】:

    标签: java spring hibernate jsf jakarta-ee


    【解决方案1】:

    制作你的 bean @ViewScoped 而不是 @RequestScoped

    您可以在 this article 中找到一个非常详尽的解释,但它不起作用的原因是用于 h:dataTable 的数据没有通过请求保留。

    当您的 bean 为 @RequestScoped 时,每次单击向服务器发出另一个请求的按钮时,都会创建一个新的 bean 实例。然后,您在删除命令按钮的操作中绑定为参数的值不再存在。

    使您的 bean @ViewScoped 在您处于同一个视图时(当您回发到同一个 XHTML 页面时)通过请求使其保持活动状态。这样,用作参数的对象仍然存在,并且绑定应该按预期工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-22
      • 2012-07-02
      • 2012-07-02
      • 2014-07-01
      相关资源
      最近更新 更多