0

我在我的应用程序中使用 primefaces 自动完成向用户建议 userIds。一旦用户在Autocomplete文本框中输入三个字符,我的UserIds列表将被建议给用户自动完成。用户从列表中选择 userId 后,我将使用以下格式更新输出文本中的用户名和姓,并在该名称旁边John Doe(jd123)添加一个按钮。Delete如代码中的注释所示,第一个 ajax 请求工作正常。但是当我尝试删除我正在使用打印的名称时,我<h:outputText/>收到一个错误,即

javax.faces.FacesException:找不到从“j_idt34:0:imgid”引用的标识符“items”的组件。

我的代码:

<h:outputLabel value="Select user" for="acMinLength" />
<p:autoComplete id="acMinLength" 
                minQueryLength="3" 
                value="#{autoCompleteBean.txt2}" 
                completeMethod="#{autoCompleteBean.complete}">
    <p:ajax event="itemSelect" 
            listener="#{autoCompleteBean.handleSelect}" 
            update="items"/>    // First Ajax request perfectly working fine
</p:autoComplete>

<h:outputLabel value="selectedUsers" for="acMinLength" />
<h:panelGroup id="items">
    <ui:repeat value="#{autoCompleteBean.printId}" var="item">
        <h:outputText value="#{item}"/>
        <h:graphicImage name="delete.png" library="images" id="imgid">
        <p:ajax event="click"
                listener="#{autoCompleteBean.updateList}" 
                update="items"/>  // This is where i am getting exception 
   </ui:repeat>
<h:panelGroup>

我知道我可以使用子 Ajax 请求更新父组件。但我不知道我做错了什么。

4

2 回答 2

0

更新 h:form 组件应该更安全。我不确定您是否可以按 id 更新每个 h: 组件。如果您打开生成的 xhtml 并尝试检查子组件的实际 id 路径,您将看到不包含所有父组件的 id。一些 id 被跳过

但是,你可以试试这个

update=":#{p:component('items')}"

希望能帮助到你

于 2013-10-16T09:38:06.077 回答
0

经过严格搜索后,我尝试了andre此处发布的答案(Primefaces - 无法在数据表之外找到带有标识符的组件)并欢呼它正在工作。

像这样

update="@([id$=items])"
于 2013-10-16T14:11:57.673 回答