2013-08-28 3 views
0

Я использую Primefaces 3.5. У меня есть следующий код:Галерея обновлений PrimeFaces при изменении SelectOneMenu

<p:panel id="containerSelectionPanel" header="Container Selection"> 
    <h:form id="containerSelectionForm"> 
     <p:selectOneMenu value="#{manageContainersBean.selectedContainer}"> 
      <f:selectItems value="#{manageContainersBean.containerList}" var="container" itemLabel="#{container.name}" /> 
      <p:ajax update=":componentSelectionPanel" /> 
     </p:selectOneMenu> 
    </h:form> 
</p:panel> 

<p:panel id="componentSelectionPanel" header="Component Selection"> 
    <h:form id="componentSelectionForm"> 
     <p:galleria id="componentGallery" var="component" 
      value="#{manageContainersBean.selectedContainer.components}"> 
      <p:graphicImage value="#{component.preview}" title="#{component.name}" alt="#{component.name}"></p:graphicImage> 
     </p:galleria> 
    </h:form> 
</p:panel> 

При запуске сайта галерея отображается правильно. Однако, если я изменю выбор в SelectOneMenu, галерея просто пуста (ничего не отображается, панель «Выбор компонента» пуста).

Обновление по запросу AJAX. Список компонентов извлекается после обновления, предварительный просмотр, а также имя запрашиваются по желанию. Тем не менее, HTML код, сгенерированный для обновленной галереи содержит очень мало строк, гораздо меньше, чем при загрузке галереи изначально, смотрите здесь:

<ul class="ui-galleria-panel-wrapper"> 
    <li class="ui-galleria-panel ui-helper-hidden"> 
     <img id="j_idt28" alt="Have lunch" title="Have lunch"> 
    </li> 
    <li class="ui-galleria-panel ui-helper-hidden"> 
     <img id="j_idt28" alt="Have brunch" title="Have brunch"> 
    </li> 
</ul> 

Как можно видеть, вновь выбранный контейнер неправдоподобный, хотя и изображения несколько обновлены (но inital gallery содержит больше кода).

Я уже пробовал обновлять полную форму, а не только галерею: тот же результат. Я попытался переместить галерею из самой формы: тот же результат. Я попытался использовать обновление Javascript с консоли браузера, как было проверено here, ничего не происходит.

У кого-то есть решение этой проблемы?

Обновление: Я проверил ответ сервера, который получает сообщение, когда галерея должна быть обновлена. Он содержит точно такой же код, как и начальный отклик (когда работает галерея), поэтому во время рендеринга ответа должно быть что-то не так с JSF. Но до сих пор не знаю, как справиться с этим.

Редактировать: общая вещь: форма не должна обновляться, а полная панель.

С уважением, bobbel

ответ

0

Я обнаружил, что проблема сообщается here.

Временное решение, то это изменить запрос Аякса в containerSelectionForm следующим образом:

<p:ajax 
    update=":componentSelectionPanel"   
    oncomplete="PrimeFaces.cw('Galleria','widget_componentSelectionForm_componentGallery',{id:'componentSelectionForm:componentGallery'}" /> 

В зову PrimeFaces.cw() обязательно включать в себя параметры GALLERIA как panelWidth в объекте, который уже содержит id.

+0

не работает .... –

+0

@IrfanNasim: может быть, PF - сумасшедший, неустойчивый мир. К сожалению, я уже давно не работаю с Java, поэтому я не могу вам помочь. Если вы считаете, что принятие должно быть удалено или вы знаете, как его решить, просто скажите мне. Но также может быть, что только в вашей конкретной среде это не сработает или только в моей конкретной среде это действительно сработало. Трудно сказать. – bobbel