0

刚刚看到很多涉及“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 和更新命令。

我尝试了我在堆栈溢出的旧问题中学到的所有东西,然后再问你这个问题。

非常感谢阅读和关注。

4

1 回答 1

2

到目前为止给出的代码对我来说在 Mojarra 2.1.9 和 PrimeFaces 3.3 上工作得很好。

如果您也升级到最新版本,那么您的问题很可能会得到解决。

于 2012-06-19T12:32:52.283 回答