JSF не может обновить одну форму в пользовательском интерфейсе: повторить извне

У меня есть две проблемы, которые тесно связаны:

  1. Мне нужно обновить форму внутри тега внутри пользовательского интерфейса: повторить из диалога на главной странице и не могу понять, как (потому что в пользовательском интерфейсе есть много тегов: повтор, и мне нужно обновить только один)
  2. Именованные контейнеры портятся и теряют свой "индекс", когда я использую идентификатор в этой форме (в случае попытки определить выражение пути обновления...)

причина, по которой мне это нужно: обновление "целого списка" (текущая ситуация) ломает все <p:calendar> внутри <p:dialog> как-то (без ошибок...) (наложение календаря отображается в первый раз, но после обновления списка оно больше не появляется (необходимо перезагрузить страницу снова). Также я не хочу обновлять 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-компонент, чтобы диалоговое окно знало, что обновлять или сравнивать)?

Второй вопрос:

почему JSF генерирует в случае не определения id="..." для контейнера именования в пользовательском интерфейсе: повторить что-то вроде

  • repeatId: 0: j_id_c0_6
  • repeatId: 1: j_id_c0_6
  • repeatId: 2: j_id_c0_6

и когда я определяю идентификатор для формы (<h:form id="formname">) что-то вроде

  • repeatId: FormName
  • repeatId: FormName
  • repeatId: FormName

что вызывает duplicateId (из-за отсутствия "имени итератора" в имени)?

Имеет ли это смысл?

1 ответ

Решение

Я решил это; ошибка была в другом месте: я забыл во включенном файле тега, который вызвал предупреждение js (что сломало календарь).

большое спасибо

Другие вопросы по тегам