malformedXML:更新期间:找不到outerTab:j​​_idt185; iframe id =" JSFFrameId"

时间:2018-02-02 17:31:44

标签: ajax jsf primefaces facelets

我有一个带有PrimeFaces selectOneMenu的表单,当用户选择一个选项时,我想以相同的形式刷新具有不同数据的DataTable。当我选择一个选项时,我会得到一个Javascript弹出窗口,上面写着&#34; malformedXML:更新期间:outerTab:找不到j_idt185&#34;没有DataTable刷新和检查源我在页面底部看到一个不可见的iframe,id =&#34; JSFFrameId&#34;其中包含元素<partial-response>,而元素<update id="outerTab:j_idt185" ...>又包含元素<![CDATA[<div id="outerTab:j_idt185" class="ui-messages ui-widget" aria-live="polite"></div>]]>,其中包含元素<messages>。我认为这引用了我的<div id="outerTab:facilitatorTestsForm:j_idt113" class="ui-messages ui-widget" aria-live="polite"></div>标记,但是支持bean中没有任何内容创建消息,我确实在页面源<div align="center"> <h:form id="facilitatorTestsForm"> <p:messages for="testBeanMessages" showSummary="true" showDetail="true" globalOnly="true" escape="false" autoUpdate="true" /> Tests for which event? <p:selectOneMenu value="#{testBean.selectedEventId}" style="top: 7px; "> <f:selectItem itemLabel="All Tests" itemValue="" /> <f:selectItems value="#{testBean.facilitatorEvents}" var="event" itemValue="#{event.id}" itemLabel="#{event.name}" /> <f:ajax update="facilitatorTests" /> </p:selectOneMenu> <p:commandButton value="Add a New Test" style="margin: 20px;" oncomplete="PF('newTestDialog').show();" actionListener="#{testBean.createEmptyNewTest}" immediate="true" /> <p:dataTable var="test" value="#{testBean.testsForFacilitator}" rowIndexVar="index" id="facilitatorTests" widgetVar="facilitatorTests" selectionMode="single" selection="#{testBean.selectedTest}" rowKey="#{test.id}"> <p:ajax event="rowSelect" oncomplete="PF('facilitatorEditTestDialog').show(); " update="@form:facilitatorEditTestDialog" /> <p:column>#{index + 1}</p:column> <p:column headerText="Test" sortBy="#{test.name}" width="40%"><h:outputText value="#{test.name}" /></p:column> <p:column headerText="Tester" sortBy="#{test.tester.fullname}"><h:outputText value="#{test.tester.fullname}" /></p:column> <p:column headerText="Manager" sortBy="#{test.manager.fullname}"><h:outputText value="#{test.manager.fullname}" /></p:column> <p:column headerText="Event" sortBy="#{test.event.name}"><h:outputText value="#{test.event.name}" /></p:column> <p:column headerText="Functional Area" sortBy="#{test.functionalArea.name}"><h:outputText value="#{test.functionalArea.name}" /></p:column> <p:column headerText="Complete" width="150" sortBy="#{test.completionDate}"><h:outputText value="#{test.completionDate == null ? 'Not Completed' : test.completionDate}"><f:convertDateTime pattern="M/d/yyyy hh:mm a" /></h:outputText></p:column> <p:column id="delete" style="text-align: center; vertical-align: middle; min-width: 54px; "> <p:commandButton update="facilitatorTests" process="facilitatorTests" icon="ui-icon-close" actionListener="#{testBean.deleteTest(test.id)}" title="If the test has not been completed, it will be deleted permanently. Otherwise it will be archived."/> </p:column> </p:dataTable> <... a few dialogs with conditional rendering ...> </h:form> </div> 中看到了消息所在的元素,因此消息标记确实已呈现。我找不到包含&#34; j_idt185&#34;的ID的元素。并且显然两个Javascript都没有。

&#34; outerTab&#34;在ID中是PrimeFaces TabView,其中包含所有这些内容。

页面刷新会导致更新发生,DataTable会显示所选SelectOneMenu选项的正确数据。

我在balusC中找到了几个帖子,其中一些由ajax调用更新的元素具有渲染值,使得它不能渲染,因此在调用更新时无法找到。我的更新目标(DataTable)没有渲染属性,并且始终可见,因此这是一个不同的问题。其他帖子讲的是早期版本的PrimeFaces中的一个错误(我使用的是6.1)。我无法弄清楚为什么会出现这种错误。

@Kukeltje好好地向我指了几篇帖子,显示在文件上传组件或表单提交中使用编码类型的multipart / form-data会导致此问题,但我的页面都没有这些。

以下是我的网页摘录:

versionCode

我为selectOneMenu更新属性尝试了不同的目标,但它没有改变行为,所以我认为它是正确的。

Primefaces 6.1
Mojarra JSF API&amp; IMPL 2.2.4
EL 3.0.0
Tomcat 7

这是一个JSF错误吗?感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

找到解决方案。感谢@Kukeltje留在我身边,即使他因为没有足够的信息而向我提出问题:)

回到@BalusC的帖子,关于不呈现ajax更新的目标。在这种情况下,我有几个PrimeFaces TabView选项卡包含带有<p:messages>的{​​{1}}标签,并且根据用户的角色显示/隐藏选项卡。当我从这些消息标记中删除autoUpdate="true"时,问题就消失了。显然每次我做一个ajax帖子,即使我有部分提交仅限于当前可见选项卡的渲染子元素,autoUpdate="true"会导致JSF尝试更新未渲染选项卡中的消息标签,当然它们无法找到

我发现这个的方法是将id属性放在我的表单中的每个元素上。然后,Javascript错误将我指向一个命名(id&#39; d)元素,而不是一个具有我无法跟踪的自动分配ID的元素,当我看到&#34; autoUpdate&#34;灯泡亮了。道德:把艾滋病放在一切。

我希望这可以帮助有相同症状的人到处寻找autoUpdate。

而@Kukeltje你是对的,我的帖子信息不充分 - 如果没有带有渲染属性的封闭标签,你就不会看到问题。因为他们在另一个模板autoUpdate的形式我不认为它们是相关的。 Wrongo!