【发布时间】:2012-06-21 00:31:53
【问题描述】:
刚看到很多关于“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 和更新命令。
我尝试了我在堆栈溢出的旧问题中学到的所有东西,然后再次询问您。
非常感谢您的阅读和关注。
【问题讨论】:
-
JSF impl/version 和 PF 版本是什么?
-
那个“ghost” id 是一个组件自动生成的 id。尝试为所有组件添加 ID,以便在打印错误消息时它会告诉您要查找的组件 ID。此外,如果您的自定义组件有一个表单,请记住
将在您的 xhtml 页面中打印 N 个表单,并且 commandButton 范围将只是该表单(至少在您的实际设计中)。如果您使用的是 JSF 2,也许 this link 可以帮助您。 -
@BalusC,我正在使用 JSF 2.0 和 Primefaces 3.0.1。
-
@LuiggiMendoza,我阅读了链接,但恐怕我们无法将其从托管 bean 更改为复合组件。不是现在,也许是将来。
-
"JSF 2.0" 是规范版本,不是实现名称或版本。
标签: java jsf primefaces