2011-08-24 86 views
2

我有一个PrimeFaces数据表。对于此表中的每一行,我想允许用户更新/删除行条目(用户)。h:commandButton在PrimeFaces中不工作p:dataTable

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:p="http://primefaces.prime.com.tr/ui"> 
<h:head> 
    <link type="text/css" rel="stylesheet" href="themes/bluesky/skin.css" /> 
</h:head> 
<h:body> 
    <center> 
     <h:form> 
      <p:panel id="viewUsersPanel" header="View Users"> 
       <p:dataTable var="user" value="#{uController.users}" 
        emptyMessage="No Users Found."> 
        <p:column style="text-align: center;"> 
         <f:facet name="header"> 
          <h:outputText value="Name" /> 
         </f:facet> 
         <h:outputText value="#{user.name}" /> 
        </p:column> 
        <p:column style="text-align: center;"> 
         <f:facet name="header"> 
          <h:outputText value="Postal Address" /> 
         </f:facet> 
         <h:outputText value="#{user.address}" /> 
        </p:column> 
        <p:column style="text-align: center;"> 
         <f:facet name="header"> 
          <h:outputText value="Phone Number" /> 
         </f:facet> 
         <h:outputText value="#{user.phone}" /> 
        </p:column> 
        <p:column style="text-align: center;"> 
         <f:facet name="header"> 
          <h:outputText value="Email Address" /> 
         </f:facet> 
         <h:outputText value="#{user.email}" /> 
        </p:column> 
        <p:column style="text-align: center;"> 
         <f:facet name="header"> 
          <h:outputText value="DOB" /> 
         </f:facet> 
         <h:outputText value="#{user.dob}"> 
          <f:convertDateTime pattern="dd-MMM-yyyy" /> 
         </h:outputText> 
        </p:column> 
        <p:column style="text-align: center;"> 
         <f:facet name="header"> 
          <h:outputText value="No. Memberships" /> 
         </f:facet> 
         <h:outputText value="#{user.numberOfMemberships}" /> 
        </p:column> 
        <p:column style="text-align: center;"> 
         <f:facet name="header"> 
          <h:outputText value="Actions" /> 
         </f:facet> 
         <h:commandButton value="Update" action="#{uController.update}" /> 
         <h:commandButton value="Delete" action="#{uController.delete}" /> 
        </p:column> 
       </p:dataTable> 
       <h:panelGrid columns="2" cellpadding="2" id="footerPanelGrid" 
        border="0"> 
        <h:commandButton action="#{uController.home}" value="Home Page" /> 
       </h:panelGrid> 
      </p:panel> 
     </h:form> 
    </center> 
</h:body> 
</html> 

但是,两个按钮都不起作用。相反,他们似乎只是刷新视图页面。我在调试中运行了应用程序,并且没有更新或删除方法。

我怀疑这可能是由于在p:dataTable中使用h:commandButton。不过,我也试过p:commandButton,但无济于事。

仅供参考,这里是UserController类的一个片段:

@ManagedBean(name="uController") 
public class UserController extends AbstractController { 

    private Collection<User> users; 

      ... 

    public String update() { 

     System.out.println("Ready for update"); 

     return "update-user"; 
    } 

    public String delete() { 

     System.out.println("Ready for delete"); 

     return "delete-user"; 
    } 
      ... 
} 
+0

您是否尝试将action =“#{uController.update}”更改为action =“#{uController.update()}”(更新后小括号)?我知道它应该可能没有他们工作,但经过一些与JSF的工作,我不会感到惊讶... ... –

+0

@Zenzen刚刚试过,为删除方法,并获得第一次加载页面时出现以下错误: class'mypackage.UserController'没有属性'delete' – JamesB

+0

你是否在使用Firebug,Chrome或其他任何带有像firebug这样的调试工具的FF?你可以在按下其中一个按钮后检查响应是什么?我知道有几次我有PF类似的问题,没有错误只是页面刷新,因为它发现有一个NullPointerExc在响应发送... –

回答

2

我发现使用ViewScoped豆的解决方案。我碰到这种情况的文章:

Learning JSF2: Managed beans

我改变了我的H:命令按钮来:

<h:commandButton value="Delete" action="#{userList.delete}"> 
    <f:setPropertyActionListener target="#{userList.selectedUser}" 
     value="#{user}" /> 

我还重新设计我的UserController类,并成为在UserList:

import java.util.Collection; 

import javax.annotation.PostConstruct; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ManagedProperty; 
import javax.faces.bean.ViewScoped; 

@ManagedBean(name="userList") 
@ViewScoped 
public class UserList { 

    private Collection<User> users; 
    private User selectedUser; 

    @ManagedProperty(value="#{userService}") 
    private UserService userService; 

    public void setUserService(UserService userService) { 

     this.userService = userService; 
    } 

    @PostConstruct 
    public void populateList() { 

     users = userService.getUsers(); 
    } 

    public void delete() { 

     // TODO remove from DB 

     users.remove(selectedUser); 
    } 

    public User getSelectedUser() { 

     return selectedUser; 
    } 

    public void setSelectedUser(User selectedUser) { 

     this.selectedUser = selectedUser; 
    } 

    public Collection<User> getUsers() { 

     return users; 
    } 

} 

感谢您的回复Zenzen。

相关问题