刚刚看到很多涉及“update”、“@all”、“@form”的问题,但没有人解决我的应用程序中的一个情况。
我有一个名为 threadList 的自定义 JSF 标签:
<h:form>
<h:panelGroup>
<p:commandButton action="#{Bean.action(catId, id)}" icon="ui-icon-weblibrary ui-icon-weblibrary-like" title="Start" update="@form" value="#{Bean.threadName}" />
</h:panelGroup>
</h:form>
此自定义标签由另一个自定义标签插入,如下所示:
<ui:repeat value="#{Bean.threadList}" var="thread">
<ui:include src="threadList.xhtml">
<ui:param name="catId" value="..." />
<ui:param name="id" value="..." />
</ui:include>
</ui:repeat>
有时这可能是第二个 taglib 和通过 ajax 更新的结果。
事情是这样的……
- 当我在 p:commandButton 中设置 update="@form" 时,一切正常,但在我的日志中,我看到“无法找到标识符为 "j_idt70:0:j_idt82" 的组件。”;
- 当我设置 update=":@form" 或 update=":form" 时,“在视图中找不到标识符为“j_idt70:0:j_idt82”的组件。” 消失,但事件不会更新任何内容(即使操作成功运行);
- 最后,当我给 form 和 panelGroup 一个 id 并尝试 update=":formId:panelId" 或 update=":@formId:panelId" 或 update=":formId" 消息“找不到具有标识符“j_idt70:0 的组件: j_idt82" 在视图中。" 出现并且没有任何更新。
奇怪的是浏览器的源代码中没有。所以,我不知道这个“幽灵”j_idt70 是否破坏了所有的 id 和更新命令。
我尝试了我在堆栈溢出的旧问题中学到的所有东西,然后再问你这个问题。
非常感谢阅读和关注。