Обновление p: commandButton не работает в пользовательском интерфейсе: include - PullRequest
4 голосов
/ 27 декабря 2010

Я хочу обновить часть страницы с помощью PPR. Это часть страницы, которую я хочу обновить:

 <h:panelGroup id="aggiungiAuto"
                  rendered="#{!autoBean.operazioneOk}">
        <ui:include src="../component/aggiungi_auto.xhtml"/>
 </h:panelGroup>

Пока эта команда присутствует в aggiungi_auto.xhtml

 <p:commandButton value="Submit"
                  update="growl aggiungiAuto aggiungiFoto"
                  actionListener="#{autoBean.insert}"/>

Есть идеи?

Ответы [ 2 ]

6 голосов
/ 28 декабря 2010

JS / Ajax работает на стороне клиента, а не на стороне сервера.JSF работает на стороне сервера, а не на стороне клиента.Когда вы указываете JSF не отображать компонент в HTML, на стороне клиента ничего не будет присутствовать, поэтому JS / Ajax не сможет найти элемент HTML для обновления / обновления.

Вам нужно обернуть егов другом <h:panelGroup>.

<h:panelGroup id="aggiungiAuto">
    <h:panelGroup rendered="#{!autoBean.operazioneOk}">
        <ui:include src="../component/aggiungi_auto.xhtml"/>
    </h:panelGroup>
</h:panelGroup>

Таким образом, <span id="aggiuniAuto"> всегда всегда присутствует на стороне клиента, поэтому JS / Ajax сможет обновить его с новыми данными HTMLгенерируется JSF.

0 голосов
/ 26 октября 2018

Так что у меня возникла такая проблема с PrimeFaces (приведенный выше ответ не был достаточным на этот раз), и я также нашел решение.

Часть проблемы, я думаю, заключалась в том, что я использовал ui:include рекурсивно. По какой-то причине PrimeFaces иррационально заставляла компоненты пользовательского интерфейса связываться с внутренними данными несинхронно; например, при нажатии кнопки «Добавить» в пользовательском интерфейсе будет создано новое значение, но затем данные для него будут удалены из значений для раздела ниже и т. д.


Объяснение? «[O] В объекте видимости, в форму добавлено скрытое поле для хранения данных обратной передачи [;], если это поле не включено в процесс, то компонент потеряет контекст». Эта конкретная проблема особенно характерна для ui:include рекурсии. Решение (все относительно p:commandButton или другого действующего компонента):

  • Убедитесь, что update и process указывают на компонент JSF, а не на обычный компонент HTML.
  • update следующая область действия, если она нарушается (не синхронизируется с привязкой).
  • Используйте styleClass для обновления (не например, PF ID или типа @this:@parent), так что вместо PF используется jQuery, например: @(.fieldset-class).
  • process любой объем обновляется. (Это необходимо для данных обратной передачи, чтобы Бин сохранял свой контекст для обновления ...) process="@this" здесь не требуется, при условии, что кнопка содержится в компоненте значения процесса.
  • Для всех кнопок без нужной проверки установите immediate="true".
  • Если ничего из вышеперечисленного не работает (что произошло с кнопками Add, возможно, из-за рекурсии ui:include), задайте process="@this", immediate="true" и update="@none", а затем oncomplete="remoteCommandName();" и укажите p:remoteCommand вместо этого с таким именем с process, immediate и update, упомянутыми в вышеуказанных пунктах.
  • Если ничего из вышеперечисленного не работает (что произошло с некоторыми другими кнопками, возможно, из-за того, что он был еще одним слоем глубже в рекурсии ui:include) ... оберните h:panelGroup вокруг следующего c:forEach и затем обновите PrimeFaces ID этого в самой кнопке при сохранении ее вызова remoteCommand впоследствии, как указано выше.
  • Если ничего из вышеперечисленного не работает (что случилось со мной снова) ... Попробуйте следующий код:
    • В p:commandButton(s): oncomplete="$('.FixButtonSC').click();"
    • В p:fieldset с классом стилей FieldsetSC:
          <!-- Fix (hidden) button. -->
          <p:commandButton id="FixButton" styleClass="FixButtonSC"
            process="@this" update="@(.FieldsetSC)" style="display: none;" />

Надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...