【问题标题】:reRender doesn't work for a4j:commandLink tagreRender 不适用于 a4j:commandLink 标签
【发布时间】:2012-01-11 13:17:25
【问题描述】:

我有一个richfaces 项目,一个看似简单的事情不想工作:( 查看代码:

<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),则会出现新的修改数据。

有什么想法吗? 谢谢,本

【问题讨论】:

  • 禁止用户后是否更新 adminBean.userList?
  • 是的。我在 getter 中有一个数据库查询,正如我所提到的,调用了 getter。我也尝试将查询放入操作中,因此如果更新(禁止)成功,它会被触发,但仍然没有:(
  • 尝试重新渲染整个表格而不是一列
  • 尝试了这个和 ccheneson 的想法,但没有一个能解决我的问题。

标签: jsf richfaces ajax4jsf


【解决方案1】:

试着用a4j:outputPanel包围你的rich:dataTable

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

【讨论】:

    【解决方案2】:

    我已经渲染了它工作的数据表。我正在使用 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");
            }
        }
    
    
    }
    

    用户豆:

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

    【讨论】:

    • 嗯,那你能把你用的豆子发给我吗?我知道它不应该与它有任何关系,但仍然值得一试:)
    • 万一您使用的是richfaces 3.X,请通过此链接帮助您解决问题mkblog.exadel.com/2011/03/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    相关资源
    最近更新 更多