COMMANDBUTTON仅适用于第二次点击,直到 上一个HashMap被去除(Command

2019-10-21 18:33发布

我与JSF 2.2.9的工作,我有以下DataTable,并将按钮:

<h:commandButton id="commandButtonRemoverSelected"
                        actionListener="#{managedBeanName.removeSelected()}"
                        class="btn btn-primary" value="Sim">
                    </h:commandButton>

    <h:dataTable var="bean" value="#{managedBeanName.beans}" styleClass="table table-hover" 
            binding="#{managedBeanName.dataTable}">
                <h:column headerClass="smallColumn">
                    <f:facet name="header">
                        <h:selectBooleanCheckbox valueChangeListener="#{managedBeanName.selectAll}">
                            <f:ajax execute="@form" render="@all" />
                        </h:selectBooleanCheckbox>
                    </f:facet>
                    <h:selectBooleanCheckbox value="#{managedBeanName.registrosSelecionados[bean]}" />
                </h:column>

            </h:dataTable>

按钮“commandButtonRemoverSelected”只要调用的ActionListener在第二次点击。 当我删除以下行从datatabe一切工作正常(命令按钮被称为先点击):

<h:selectBooleanCheckbox value="#{managedBeanName.registrosSelecionados[bean]}" />

所以,我managedBean有一个叫做“registrosSelecionados”应该存贮一对“豆,布尔” MAP。 看到:

private Map<Bean, Boolean> registrosSelecionados = new HashMap<Bean, Boolean>();

Answer 1:

我解决了这个问题,一个解决办法 ,我会分享这个:

1 - 我注意到,每一个CommandButton点击“getRegistrosSelecionados()被调用,ActionListener的没有。 所以我想,JSF在处理getRegistrosSelecionados()和不处理的ActionListener,我不知道为什么,这是真正的问题。 在第二次点击的ActionListener处理,因为所有checkboxs已经发送到ManagedBean,在第一次点击。

2 - 所以,我的解决方法是力,在复选框呼叫JSF请求每一次点击,不等待的commandButton提交。 在当的commandButton被点击复选框所有这种方式处理。

<h:selectBooleanCheckbox value="#{cc.attrs.managedBeanName.registrosSelecionados[bean]}">
                  <f:ajax execute="@this" render="@this" />
                </h:selectBooleanCheckbox>

我的复选框收到的AJAX为只执行自己和表现自己,当我的commandButton点击我只需要执行命令按钮并再次渲染的形式:

<h:commandButton id="commandButtonRemoverSelected"
                        actionListener="#{cc.attrs.managedBeanName.removeSelected()}"
                        class="btn btn-primary" value="Sim">
                        <f:ajax execute="@this" render="@form" />
                    </h:commandButton>

这种解决方法适用于我,因为我没有找到这个问题的更好的解决方案。



文章来源: Commandbutton works only on second click until a on a HashMap is removed