2012-01-11 12 views
0

私はRichFacesのプロジェクトを持っている、と一見単純な事は仕事をしたいdoes't は、コードをチェックアウト:再レンダリングが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のゲッターも実行されますが、ページ上で何も起こりません。手動で更新すると(F5)、新しい変更データが表示されます。

アイデア? ありがとう、ベン

+0

ですユーザを禁止した後にadminBean.userListを更新しますか? – soulcheck

+0

はい。私はゲッターにDBクエリを持っています。私が言及したように、ゲッターが呼び出されます。私はまた、アクションにクエリを入れようとしましたので、更新(禁止)が成功し、まだ何も起こっていない場合に発生します:( –

+0

もう一つの列の代わりにテーブル全体を再描画しようとしました – soulcheck

答えて

1

あなたのa4j: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

それは何の効果もありません:( –

1

rich:dataTableは、私はそれが動作の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、あなたは私が使用した豆を私に送ることができますか? 、試してみる価値があります:) –

+0

richfaces 3.Xを使用している場合は、このリンクを参照して問題を再現するのに役立ちますhttp://mkblog.exadel.com/2011/03/learn-how-to- adddelete-table-row-with-richfaces-5分/ –

関連する問題