2012-01-11 45 views
0

我有一个RichFaces的项目,以及一个看似简单的事情,开不想要工作:( 退房代码:重新呈现不适合A4J工作:commandLink标签

<rich:panel header="Admin home" id="panel"> 
      <h:form> 
       <rich:dataTable id="userlisttable" value="#{adminBean.userList}" 
        var="user" style="width:100%"> 

        <rich:column id="banDate" headerClass="dataTableHeader" 
         label="Ban date" sortable="true" sortBy="#{user.banDate}" 
         sortIconAscending="dataTableAscIcon" 
         sortIconDescending="dataTableDescIcon"> 

         <f:facet name="header"> 
          <h:outputText value="Ban Date" /> 
         </f:facet> 

         <h:outputText value="#{user.banDate}" /> 

        </rich:column> 

        <rich:column id="actions" headerClass="dataTableHeader" 
         label="Actions" sortable="false"> 

         <f:facet name="header"> 
          <h:outputText value="Actions" /> 
         </f:facet> 

         <h:panelGrid columns="4"> 
          <h:outputText value="Ban user for" /> 

          <a4j:commandLink action="#{adminBean.banUser}" value="One week" 
           style="font-size:16px" reRender="banDate" immediate="true"> 
           <f:setPropertyActionListener target="#{adminBean.user}" 
            value="#{user}" /> 
          </a4j:commandLink> 

         </h:panelGrid> 

        </rich:column> 

       </rich:dataTable> 

      </h:form> 
     </rich:panel> 

它的行为非常奇怪: (actionBean.banUser)被执行,那么userList的getter也被执行,但是页面上没有任何反应,如果我手动刷新它(F5),新的修改后的数据就会出现。 ,本

+0

你禁止用户后更新adminBean.userList? – soulcheck 2012-01-11 13:22:49

+0

是的。我在getter中有一个数据库查询,正如我所提到的,getter被调用。我也试图把这个查询放在这个动作中,所以如果更新(禁止)成功,那么它就会被解雇,并且仍然没有任何东西:( – 2012-01-11 13:28:54

+0

尝试重新渲染整个表而不是一列 – soulcheck 2012-01-11 13:31:26

回答

1

尝试周围您rich:dataTablea4j:outputPanel

<a4j:outputPanel id="myOutputPanel"> 
    <rich:dataTable id="userlisttable" value="#{adminBean.userList}" 
        var="user" style="width:100%"> 
... 
    <a4j:commandLink action="#{adminBean.banUser}" value="One week" 
     style="font-size:16px" reRender="myOutputPanel" immediate="true"> 
      <f:setPropertyActionListener target="#{adminBean.user}" value="#{user}" /> 
    </a4j:commandLink> 
... 
    </a4j:outputPanel> 
+0

nope,那没有任何作用:( – 2012-01-11 13:31:49

1

我已经呈现它的工作原理DataTable中..和我使用RichFaces的4.0。请让我知道如果你使用的任何其他版本...

下面是其工作的代码

<rich:dataTable id="userlisttable" value="#{adminBean.userList}" 
       var="user" style="width:100%"> 
    <rich:column id="banDate" headerClass="dataTableHeader" 
       label="Ban date" sortable="true" sortBy="#{user.userId}" 
       sortIconAscending="dataTableAscIcon" 
       sortIconDescending="dataTableDescIcon"> 
     <f:facet name="header"> 
      <h:outputText value="Ban Date" /> 
     </f:facet> 
     <h:outputText value="#{user.userId}" /> 
    </rich:column> 
    <rich:column id="actions" headerClass="dataTableHeader" 
       label="Actions" sortable="false"> 
     <f:facet name="header"> 
      <h:outputText value="Actions" /> 
     </f:facet> 
     <h:panelGrid columns="4"> 
      <h:outputText value="Ban user for" /> 
      <a4j:commandLink action="#{adminBean.banUser}" value="One week" 
          style="font-size:16px" render="banDate" > 
      <f:setPropertyActionListener target="#{adminBean.user}" 
              value="#{user}" immediate="true" /> 
     </a4j:commandLink> 
     </h:panelGrid> 
    </rich:column> 
</rich:dataTable> 
</h:form> 
</rich:panel> 

AdminBean:

import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.List; 

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 

@ManagedBean(name="adminBean") 
@ViewScoped 
public class AdminBean implements Serializable { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = -5338764155023244249L; 

    private List<UserBean> userList; 

    private UserBean user; 

    /** 
    * @return the user 
    */ 
    public UserBean getUser() { 
     return user; 
    } 

    /** 
    * @param user the user to set 
    */ 
    public void setUser(UserBean user) { 
     this.user = user; 
    } 


    /** 
    * @return the userList 
    */ 
    public List<UserBean> getUserList() { 
     return userList; 
    } 

    /** 
    * @param userList the userList to set 
    */ 
    public void setUserList(List<UserBean> userList) { 
     this.userList = userList; 
    } 

    public AdminBean() { 
     UserBean user1= new UserBean(); 
     user1.setUserId("1"); 
     user1.setUserName("userName1"); 

     UserBean user2= new UserBean(); 
     user2.setUserId("2"); 
     user2.setUserName("userName2"); 

     userList = new ArrayList<UserBean>(); 

     userList.add(user1); 
     userList.add(user2); 

    } 

    public void banUser(){ 
     if(user !=null){ 
      user.setUserId("Rendered id R1"); 
     } 
    } 


} 

的UserBean:

import java.io.Serializable; 

public class UserBean implements Serializable { 



    /** 
    * 
    */ 
    private static final long serialVersionUID = 3820279264217591645L; 

    private String userName; 

    private String userId; 

    /** 
    * @return the userName 
    */ 
    public String getUserName() { 
     return userName; 
    } 

    /** 
    * @param userName the userName to set 
    */ 
    public void setUserName(String userName) { 
     this.userName = userName; 
    } 

    /** 
    * @return the userId 
    */ 
    public String getUserId() { 
     return userId; 
    } 

    /** 
    * @param userId the userId to set 
    */ 
    public void setUserId(String userId) { 
     this.userId = userId; 
    } 



} 
+0

hm,在这种情况下,你能发给我你使用的bean吗?我知道它不应该与它有任何关系,但仍然,它值得一试:) – 2012-01-11 21:52:44

+0

只是万一你使用richfaces 3.X通过这个链接将帮助你解决问题http://mkblog.exadel.com/2011/03/learn-how-to- adddelete表行与 - RichFaces的式-5-分钟/ – 2012-01-12 17:46:11