单击按钮重置时,清除rich:extendedDataTable中的选定值

时间:2013-06-10 05:46:12

标签: jsf richfaces

我正在使用一个丰富的extendedDataTable,它将填充用户名列表。一旦用户选择了所选的值将是粗体。但我的问题是,一旦表重置,之前选择的值仍以粗体显示。任何人都知道如何解决这个问题?

查看:

<rich:extendedDataTable value="#{reportBean.allActiveUsers}"
        var="user"
        selection="#{reportBean.selection}"
        selectionMode="multiple"
        style="height:175px; width:200px;"
        id="userist">
    <a4j:ajax execute="@this" event="selectionchange" listener="#{reportBean.userSelectionListener}" render="projectList"/>
    <rich:column width="160px">
        <h:outputText value="#{user.name}" />
        <h:inputHidden value="#{user.userId}"/>
    </rich:column>
</rich:extendedDataTable>

<a4j:commandButton id="clearBtn" value="Clear"  tabindex="4">
    <a4j:ajax event="click" execute="@this" listener="#{reportBean.reset}" render="resourceList"/>
 </a4j:commandButton>

代码:

// Loading
List<User> allActiveUsers = new ArrayList<User>();

// Reset
allActiveUsers = new ArrayList<User>();

public void reset(){
    setAllActiveUsers(getUserFacade().getAllUsers());
}

3 个答案:

答案 0 :(得分:0)

您的按钮有点乱,使用a4j:ajax时不需要a4j:commandButton,因为此组件已经是AJAX。

<a4j:commandButton id="clearBtn" value="Clear"  tabindex="4">
    <a4j:ajax event="click" execute="@this" listener="#{reportBean.reset}" render="resourceList"/>
</a4j:commandButton>

为此:

<a4j:commandButton value="Clear" tabindex="4" execute="@this" listener="#{reportBean.reset()}" render="resourceList userist"/>

你错过了正确的组件更新,我也怀疑你的听众是否被调用。在JSF 2.0中,您可以调用不带参数的侦听器方法,但是当您这样做时,您需要在末尾添加()。另外你应该声明你的方法:

public void reset(AjaxBehaviorEvent event) {
    allActiveUsers = new ArrayList<User>();
}

答案 1 :(得分:0)

回答这个可能为时已晚。同样的问题困扰着我。修复是清除a4j按钮的监听器/操作中的选择列表,并在a4j按钮的oncomplete事件中将ActiveRow设置为null(检查tbodies以处理空表格案例。

的onComplete = “(#{富:组分( 'TABLEID')} tbodies。)#丰富:组分( 'TABLEID')} setActiveRow(空): ''”

还在相应的操作中将bean中的selection属性设置为null。

答案 2 :(得分:0)

我刚刚发现如何在AJAX请求后重置客户端上的当前选择,添加&#39; onready&#39;听取美国东部时间:

onready="var edt = #{rich:component('yourExtendedDataTableId')}; edt.deselectRow(edt.activeIndex);"