【问题标题】:primefaces row deleting from database从数据库中删除 primefaces 行
【发布时间】:2014-07-22 05:43:48
【问题描述】:

我正在尝试从数据库中删除 primefaces 数据表中的行。它在数据表中工作正常,但在刷新项目后显示行值。我正在使用http://www.mkyong.com/jsf2/how-to-delete-row-in-jsf-datatable/ 示例。有人可以帮忙吗?

index.xhtml

    <p:growl id="messages" showDetail="true"/>  

    <p:dataTable var="u" value="#{logonTest.userList}" id="carList" editable="true">  

        <f:facet name="header">  
            In-Cell Editing  
        </f:facet>  

        <p:ajax event="rowEdit" listener="#{tableBean.onEdit}" update=":form:messages" />  
        <p:ajax event="rowEditCancel" listener="#{tableBean.onCancel}" update=":form:messages" />

        <p:column headerText="Name" style="width:30%"> 

            <p:cellEditor>  
                <f:facet name="output">  
                    <h:outputText value="#{u.name}" />  
                </f:facet>  
                <f:facet name="input">  
                    <p:inputText value="#{u.name}" style="width:100%"/>  
                </f:facet>  

            </p:cellEditor>  

        </p:column>  

        <p:column headerText="Surname" style="width:20%">  
            <p:cellEditor>  
                <f:facet name="output">  
                    <h:outputText value="#{u.surname}" />  
                </f:facet>  
                <f:facet name="input">  
                    <p:inputText value="#{u.surname}" style="width:100%" />  
                </f:facet>  
            </p:cellEditor>  
        </p:column>  

        <p:column headerText="Username" style="width:24%">  
           <p:cellEditor>  
                <f:facet name="output">  
                    <h:outputText value="#{u.username}" />  
                </f:facet>  
                <f:facet name="input">  
                    <p:inputText value="#{u.username}" style="width:100%" />  
                </f:facet>  
            </p:cellEditor>  
        </p:column>  

        <p:column headerText="Description" style="width:20%">  
           <p:cellEditor>  
                <f:facet name="output">  
                    <h:outputText value="#{u.description}" />  
                </f:facet>  
                <f:facet name="input">  
                    <p:inputText value="#{u.description}" style="width:100%" />  
                </f:facet>  
            </p:cellEditor>  
        </p:column>  

        <p:column style="width:6%">  
            <p:rowEditor />  
    <h:commandLink value="Delete" action="#{logonTest.deleteAction(u)}" />
        </p:column>  

    </p:dataTable>  

</h:form>  

LogonTest.java

@ViewScoped
@SessionScoped
@javax.faces.bean.ManagedBean(name = "logonTest")
public class LogonTest implements Serializable{
     @PersistenceUnit(unitName="Webbeans_RESOURCE_LOCAL")
     private EntityManagerFactory emf;
    public List<User> getUserList() {
        return userList;
    }

    public void setUserList(List<User> userList) {
        this.userList = userList;
    }

    public List<User> userList = new ArrayList();


    @PostConstruct
    public void init(){
         EntityManager em = emf.createEntityManager();
         // Read the existing entries and write to console
         Query q = em.createQuery("SELECT u FROM User u");
         userList = q.getResultList();
         System.out.println("Size: " + userList.size());
    }

    public LogonTest() {

    }
    public String deleteAction(User user) {

        userList.remove(user);
        return null;
    }
}

【问题讨论】:

  • 是否从数据库中删除并显示在页面中?
  • 不,它在页面中被删除,但在数据库中没有

标签: java primefaces datatable row


【解决方案1】:

那是因为您将其从数组列表中删除,而不是从数据库中删除
使用em.remove(user)

【讨论】:

    【解决方案2】:

    您的删除操作只是将其从作用域变量中删除。

    public String deleteAction(User user) {
        userList.remove(user);
        return null;
    }
    

    您还需要通过实体管理器将其从数据库中删除。 em.remove(对象)

    【讨论】:

      【解决方案3】:

      在 EntityManager 中使用 remove 方法尝试以下代码。

      @ViewScoped
      @SessionScoped
      @javax.faces.bean.ManagedBean(name = "logonTest")
      public class LogonTest implements Serializable{
           @PersistenceUnit(unitName="Webbeans_RESOURCE_LOCAL")
           private EntityManagerFactory emf;
          public List<User> getUserList() {
              return userList;
          }
      
          public void setUserList(List<User> userList) {
              this.userList = userList;
          }
      
          public List<User> userList = new ArrayList();
      
      
          @PostConstruct
          public void init(){
               EntityManager em = emf.createEntityManager();
               // Read the existing entries and write to console
               Query q = em.createQuery("SELECT u FROM User u");
               userList = q.getResultList();
               System.out.println("Size: " + userList.size());
          }
      
          public LogonTest() {
      
          }
          public String deleteAction(User user) {
              EntityManager em = emf.createEntityManager();
              em.remove(user);
              userList.remove(user);
              return null;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2013-04-15
        • 2015-08-07
        • 2014-11-04
        • 2018-12-19
        • 2014-05-09
        • 2014-05-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多