p:通过ajax更新父级后,autocomplete停止工作

时间:2018-06-08 15:00:50

标签: primefaces autocomplete jsf-2.2

我有一个使用p:dataList呈现的自动填充列表。如下所示:

<h:panelGroup layout="block" id="outerPanel">
    <p:dataList rendered="#{bean.myModel.listOfItems.size()>0}"
                var="additionalMP"
                value="#{bean.myModel.listOfItems}" 
                rowIndexVar="index" emptyMessage="">
         <div class="wrapper ui-g">
            <div>
              <p:autoComplete
                          cache="true"
                          value="#{bean.myModel.listOfItems[index]}"  
                          completeMethod ="#{handler.getAutoCompleteData}"
                          rendered ="true"
                          required="false"
                          scrollHeight="200"
                          styleClass="custom"
                          forceSelection="true"> 
                   <p:ajax event="query" global="false"/>    
                   <f:attribute name="filter" value="filterName" /> 
                   <f:attribute name="mode" value="edit" />                          
              </p:autoComplete>                            
             </div>
            <div>                                                    
               <p:commandLink value="+ Add" actionListener="#{bean.addAutoComplete()}" 
                    update=":formName:outerPanel"></p:commandLink>
            </div>
          </div>
     </p:dataList>
</h:panelGroup>

因此,Add按钮会在列表中插入一个新项目,并更新容器面板,以便可以在UI上呈现新添加的项目。

正如预期的那样,面板已更新,我在UI上看到另一个自动完成。但问题是,所有自动完成功能现在都无法正常工作。即他们不再触发查询事件,也没有提出任何建议。

已编辑:使用自动填充字段更新表单部分的部分响应包含一些脚本标记,这些标记可能在页面就绪/加载事件上执行。所以我知道基本上新添加的素面小部件没有被初始化。

我知道如何在DOM中初始化新添加的自动填充功能吗?

1 个答案:

答案 0 :(得分:1)

所有这些麻烦的原因是javascript中的错误,该错误是由于尝试从Bean中scrollTo来页面上的特定元素而引起的。 Bean中糟糕的代码行是所有麻烦的根源。页面上没有ID为messages的元素。为什么不应该以这种方式耦合UI的一个明显例子。

RequestContext.getCurrentInstance().scrollTo("formId:messages");