Jsf 重新加载不';不适用于a4j:commandLink标签

Jsf 重新加载不';不适用于a4j:commandLink标签,jsf,richfaces,ajax4jsf,Jsf,Richfaces,Ajax4jsf,我有一个richfaces项目,一件看似简单的事情不想成功:( 查看代码: <rich:panel header="Admin home" id="panel"> <h:form> <rich:dataTable id="userlisttable" value="#{adminBean.userList}" var="user" style="width:100%"&g

我有一个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)被执行,然后用户列表的getter也被执行,但是在页面上什么都没有发生。如果我手动刷新它(F5),新的修改过的数据就会出现

有什么想法吗?
谢谢,Ben

试着用
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>

...
...

我已经呈现了它工作的数据表..并且我正在使用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.userList?是的。我在getter中有一个DB查询,正如我提到的,getter被调用。我还尝试将查询放入操作中,因此如果更新(禁止)成功,它将被激发,但仍然没有任何结果:(试着给整张桌子重新招标,而不是只给一个专栏重新招标。我也试过了,也试过了ccheneson的想法,但没有一个解决了我的问题。嗯,那样的话,你能把你用的豆子寄给我吗?我知道这不应该有什么关系,但还是值得一试:)以防万一,如果您使用的是richfaces 3.X,那么浏览此链接将有助于您重新关注此问题
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;
    }



}