微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。