ace:autoCompleteEntry 事件侦听器无法更改另一个 ace:autoCompleteEntry 值

问题描述

我使用的是 icefaces 3.3 并且我有一个带有 ace:dataTable 和 3 列的 JSF 页面

我可以点击一个按钮在表格中添加一个新行。该行将在第一列中包含一些用于确认/删除/取消插入行的按钮,以及在最后两列中的两个 ace:autoCompleteEntry。

当我更改 ace:autoCompleteEntry 的值时,我想填充另一个

这是我的 JSF 代码

<ace:dataTable id="mccTable"
                   value="#{controller.list}"
                   var="elem" style="font-size:12px"
                   reorderableColumns="false" resizableColumns="false" doubleClickSelect="false"
                   staticHeaders="true" clickableHeaderSorting="true" paginator="true"
                   paginatorPosition="bottom" pageCount="10" rows="10">

        <ace:column id="colOptButtons" style="padding-left:10px; text-align:left; width: 6%;">
            <h:commandButton id="saveBtn" type="button"
                             action="#{controller.save(elem)}"
                             image="#{resource['save.png']}">
                <f:ajax execute="@form" render="@all" immediate="true"/>
            </h:commandButton>
            <h:commandButton id="cancelBtn" type="button"
                             action="#{controller.cancel(elem)}"
                             image="#{resource['cancel.png']}"
                             immediate="true">
                <f:ajax execute="@form" render="@all" immediate="true"/>
            </h:commandButton>
            <h:commandButton id="removeBtn" type="button"
                             action="#{controller.delete(elem)}"
                             image="#{resource['delete.png']}">
                <f:ajax execute="@form" render="@all" immediate="true"/>
            </h:commandButton>
        </ace:column>

        <ace:column id="nameCol" style="text-align:left; width: 42%;" headerText='Some header'>
            <ace:autoCompleteEntry id="ac1" value="#{elem.name}" width="300" minChars="2"
                                   hideEffect="puff" showEffect="puff" delay="1000" height="100"
                                   styleClass="textstd" rows="10" size="30" direction="down"
                                   indicatorPosition="right"
                                   style="#{component.valid ? '' : 'border-color:red; border-style:solid; border-width:thin; font-weight: normal;'}">
                <f:selectItems value="#{controller.nameList}"/>
                <f:validateBean disabled="false"/>
                <ace:ajax execute="@this" render="@all" listener="#{controller.nameChanged(elem)}"/>
            </ace:autoCompleteEntry>
        </ace:column>

        <ace:column id="desCol" style="text-align:left; width: 52%;" headerText='Some header'>
            <ace:autoCompleteEntry id="ac2" value="#{elem.des}" width="300"
                                   hideEffect="puff" showEffect="puff" delay="1000" height="100"
                                   styleClass="textstd" rows="10" size="30" direction="down"
                                   indicatorPosition="right"
                                   style="#{component.valid ? '' : 'border-color:red; border-style:solid; border-width:thin; font-weight: normal;'}">
                <f:selectItems value="#{controller.desList}"/>
                <f:validateBean disabled="false"/>
                <ace:ajax execute="@this" render="@all" listener="#{controller.desChanged(elem)}"/>
            </ace:autoCompleteEntry>
        </ace:column>

    </ace:dataTable>

这是我的 java 控制器 bean 侦听器代码

    public void desChanged(Elem elem) {
        elem.setName(null);
        if(StringUtils.isNotBlank(elem.getDes())) {
          // retrieve name by des ...
          opt.ifPresent(elem2 -> elem.setName(elem2.getName()));
        }
    }



public void nameChanged(Elem elem) {
    elem.setDes(null);
    if(StringUtils.isNotBlank(elem.getName())) {
      // retrieve des by name ...
      opt.ifPresent(elem2 -> elem.setDes(elem2.getDes()));
    }
  }

当 ace:autoCompleteEntry 的值发生变化时,监听器会被正确触发。

但是其他 ace:autoCompleteEntry 的值只有在最初为空时才会更改。因此,如果我在另一个 ace:autoCompleteEntry 已经填充时开始输入,则组件值不会在视图中更新,而只会在控制器值上更新。为了让它工作,我必须在开始输入另一个组件之前清除组件内容

这是一个错误还是我遗漏了什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)