2010-01-28 3 views
2

Моя проблема в том, что RichFaces reRender не работает под «текущим элементом в дереве элементов»; только верхние элементы получают повторно.Абсолютный повторный рендеринг с использованием RichFaces

Есть ли способ доступа к нижним элементам с AJAX?

Любая помощь будет оценена! Daniel

EDIT Я отредактировал этот вопрос на более общий. См. Изменения, если они заинтересованы в исходном вопросе.

ответ

3

Вот пример, где changePanel111() изменяет содержание нижнего элемента:

<h:form id="form" prependId="true"> 
    <rich:panel id="PANEL1"> 
     <h:outputText id="PANEL1TEXT" value="#{ajaxTestBean.panel1}"/> 
     <rich:panel id="PANEL11"> 
      <h:outputText id="PANEL11TEXT" value="#{ajaxTestBean.panel11}"/> 
      <rich:panel id="PANEL111"> 
       <h:outputText id="PANEL111TEXT" value="#{ajaxTestBean.panel111}"/> 
      </rich:panel> 
     </rich:panel> 
     <rich:panel id="PANEL12"> 
      <h:outputText id="PANEL12TEXT" value="#{ajaxTestBean.panel12}"/> 
      <br/> 
      <a4j:commandLink value="CHANGE PANEL12" action="#{ajaxTestBean.changePanel12}"> 
       <a4j:support reRender="PANEL12" event="onclick"/> 
      </a4j:commandLink> 
      <br/> 
      <a4j:commandLink value="CHANGE PANEL111" action="#{ajaxTestBean.changePanel111}"> 
       <a4j:support reRender="form:PANEL111" event="onclick"/> 
      </a4j:commandLink> 
     </rich:panel> 
    </rich:panel> 
</h:form> 

Обратите внимание, как должно быть определено как form:PANEL111 нижний элемент.

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

8
  • reRender работы с обеспечением в id целевого объекта, который вы хотите засавить (в том же контейнере именования - form чаще)
  • id должна быть уникальная строка, согласно HTML спецификации
  • reRender обеспечивает динамическое значение - т.е. reRender="#{myBean.currentItemsToRerender}

Основываясь на том, что я думаю, что вы должны быть в состоянии добиться того, что вы хотите (хотя это не все LY ясно)

Update:

UIComponent.findComponent(..) имеет четко определенный алгоритм решения идентификаторов. Поэтому для абсолютной ссылки ваш reRendered id должен начать с:, а затем продолжить через иерархию именных контейнеров.

+0

Спасибо за ваш ответ! Я отредактировал мой пост ... –

+0

+1 для вашего обновления – nahab

0

reRender может указывать на любой компонент вне формы. Например, это работает:

<h:form> 
    <a4j:commandButton reRender="panel"/> 
</h:form> 

<h:panelGrid id="panel"> 
... 
</h:panelGrid> 
0

Для моего приложения MyFaces + Richfaces, <rich:panel> тег не работал, как описано в выбранном ответе. Когда я изменил его на <a4j:outputPanel ajaxRendered="true" />, он начал работать, как указано здесь. «<a4j:commandLink> Not Rerendering»

Конфигурация: MyFaces 2.1.10 (Лицевые стороны, используемые для шаблонов) и Richfaces 4.2.3.

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

Смежные вопросы