2011-08-24 6 views
2

PrimeFaces 데이터 테이블이 있습니다. 이 테이블의 각 행에 대해 사용자가 행 항목 (사용자)을 업데이트/삭제할 수있게하려고합니다.h : PrimeFaces 내에서 commandButton이 작동하지 않습니다. 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을 시도했지만 아무 소용이 없습니다.

@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 그냥 delete 메소드를 시도해 보았고 페이지가 처음으로로드 될 때 다음과 같은 오류가 발생했다. 'mypackage.UserController'클래스에 'delete'속성이 없습니다. – JamesB

+0

FF를 Firebug, Chrome 또는 Firebug와 같은 디버깅 도구가있는 FF로 사용하고 있습니까? 단추 중 하나를 눌렀을 때 응답이 무엇인지 확인할 수 있습니까? 나는 PF와 비슷한 문제가 몇 번 있었을 뿐이며 페이지를 새로 고치지 않고 보낸 답안에 NullPointerExc가 있다는 것을 알고있다. –

답변

2

나는 ViewScoped 콩을 사용하여 솔루션을 발견 : 참고로

, 여기에 UserController 클래스의 조각입니다. 나는이에 대한에서 온 기사 :있는 명령에 :

<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; 
    } 

} 

Learning JSF2: Managed beans

나는 나의 시간을 변경

답변 해 주셔서 감사합니다. Zenzen.

관련 문제