JSF 无法从外部更新 ui:repeat 中的单个表单
JSF cannot update single form in ui:repeat from outside
我有两个密切相关的问题:
- 我需要在主页的对话框中更新 ui:repeat 内标签内的表单,但不知道如何操作(因为 ui:repeat 中有很多标签,我需要更新只有一个)
- 当我以那种形式使用 id 时,命名容器被弄乱并丢失了它们的 "index"(在尝试确定更新路径表达式的情况下...)
我需要这个的原因:更新 'wholelist'(当前情况)以某种方式打破了 <p:dialog>
内的所有 <p:calendar>
(没有错误...)(日历覆盖显示在第一次,但在更新列表后它不再出现(必须重新加载页面)。而且我不想每次都更新 100 个元素,如果只能更改一个元素的话
page.xhtml
<h:panelGroup id="wholelist">
<ui:repeat var="entry" value="#{bean.foundEntries}" id="repeatId">
<customTag:someTag entry="#{entry}" />
</ui:repeat>
</h:panelGroup>
...
<p:dialog widgetVar="dialog" id="dialog">
<p:calendar value="#{bean.date}" ... /> <!-- overlay pops up on select until the whole list is refreshed. after that it does not appear until page reload -->
<p:commandButton actionlistener="#{bean.saveSomething()}" update="#{bean.componentToUpdate WHICH DOES NOT WORK...}"/>
</p:dialog>
someTag.xhtml
并且在 <customTag:someTag>
中(这是一个标签,因为多次重复使用):
...
<h:form>
... display a lot of data which can be changed by the dialog...
<p:commandButton value="show edit dialog" onComplete="PF('dialog').show()" update=":dialog">
<f:setPropertyActionListener value="??? (@form does not work)" target="#{bean.componentToUpdate}" />
</p:commandButton>
</h:form>
第一题:
我需要从对话框中刷新一个表单(=对话框需要知道我要刷新哪个表单,但我不知道该怎么做...)
以及如何让更新逻辑正常工作(将要更新的组件传递给 bean,以便对话框知道要更新或等于什么)?
第二题:
如果没有在 ui:repeat 之类的
中为命名容器定义 id="...",为什么会生成 JSF
- repeatId:0:j_id_c0_6
- repeatId:1:j_id_c0_6
- repeatId:2:j_id_c0_6
当我为表单 (<h:form id="formname">
) 定义一个 id 时,类似于
- repeatId:表单名称
- repeatId:表单名称
- repeatId:表单名称
导致duplicateId(因为名称中缺少"iterator-number")?
这有意义吗?
我已经解决了;错误在别处:我忘记了一个包含的标记文件,它导致了 js 警告(这打破了日历)。
非常感谢
我有两个密切相关的问题:
- 我需要在主页的对话框中更新 ui:repeat 内标签内的表单,但不知道如何操作(因为 ui:repeat 中有很多标签,我需要更新只有一个)
- 当我以那种形式使用 id 时,命名容器被弄乱并丢失了它们的 "index"(在尝试确定更新路径表达式的情况下...)
我需要这个的原因:更新 'wholelist'(当前情况)以某种方式打破了 <p:dialog>
内的所有 <p:calendar>
(没有错误...)(日历覆盖显示在第一次,但在更新列表后它不再出现(必须重新加载页面)。而且我不想每次都更新 100 个元素,如果只能更改一个元素的话
page.xhtml
<h:panelGroup id="wholelist">
<ui:repeat var="entry" value="#{bean.foundEntries}" id="repeatId">
<customTag:someTag entry="#{entry}" />
</ui:repeat>
</h:panelGroup>
...
<p:dialog widgetVar="dialog" id="dialog">
<p:calendar value="#{bean.date}" ... /> <!-- overlay pops up on select until the whole list is refreshed. after that it does not appear until page reload -->
<p:commandButton actionlistener="#{bean.saveSomething()}" update="#{bean.componentToUpdate WHICH DOES NOT WORK...}"/>
</p:dialog>
someTag.xhtml
并且在 <customTag:someTag>
中(这是一个标签,因为多次重复使用):
...
<h:form>
... display a lot of data which can be changed by the dialog...
<p:commandButton value="show edit dialog" onComplete="PF('dialog').show()" update=":dialog">
<f:setPropertyActionListener value="??? (@form does not work)" target="#{bean.componentToUpdate}" />
</p:commandButton>
</h:form>
第一题:
我需要从对话框中刷新一个表单(=对话框需要知道我要刷新哪个表单,但我不知道该怎么做...)
以及如何让更新逻辑正常工作(将要更新的组件传递给 bean,以便对话框知道要更新或等于什么)?
第二题:
如果没有在 ui:repeat 之类的
中为命名容器定义 id="...",为什么会生成 JSF- repeatId:0:j_id_c0_6
- repeatId:1:j_id_c0_6
- repeatId:2:j_id_c0_6
当我为表单 (<h:form id="formname">
) 定义一个 id 时,类似于
- repeatId:表单名称
- repeatId:表单名称
- repeatId:表单名称
导致duplicateId(因为名称中缺少"iterator-number")?
这有意义吗?
我已经解决了;错误在别处:我忘记了一个包含的标记文件,它导致了 js 警告(这打破了日历)。
非常感谢