Как правильно отобразить h: panelGroup при использовании f: ajax и визуализированного атрибута? - PullRequest
1 голос
/ 17 января 2012

Я разрабатываю приложение в JSF2.0. Я столкнулся с проблемой при смешивании ajax и panelGroup с визуализированным атрибутом.

Моя страница содержит 3 панели. На первой панели пользователь выбирает элемент из <h:selectOneMenu>. Это вызывает рендеринг второй панели.

Вторая панель содержит таблицу h: dataTable, которая подключена к DataModel в компоненте поддержки. Значения dataTable определяются элементом, который был выбран в <h:selectOneMenu> первой панели. Каждая строка в таблице содержит команду link для просмотра подробной информации об элементе этой строки:

<h:commandLink action="#{faseController.selectInvulling}">
      <f:ajax render="@form" execute="@form" />
</h:commandLink>

При нажатии на команду Link ссылка на третью панель отображается:

<h:panelGroup rendered="#{faseController.invullingSelected}" layout="block" styleClass="panelElement" id="invulling">
       <label>
          <span>Datum:</span>
          <h:inputText value="#{faseController.selectedInvulling.datum}" required="true" requiredMessage="Gelieve een datum in te vullen." converterMessage="Gelieve een geldige datum in te vullen (dd/mm/jjjj)." >
                 <f:convertDateTime pattern="dd/MM/yyyy" />
          </h:inputText>
       </label>
       <label>
           <span>Evaluatie</span>
           <h:inputTextarea value="#{faseController.selectedInvulling.evaluatie}" cols="100" />
       </label>
       <label>
          <span>Methode</span>
          <h:inputTextarea value="#{faseController.selectedInvulling.methode}" cols="100" />
       </label>
</h:panelGroup>

Здесь я сталкиваюсь с проблемой. В первый раз, когда я нажимаю на ссылку CommandLink, чтобы просмотреть подробную информацию об этой строке в таблице, я получаю правильные данные на третьей панели. После этого я изменяю элемент в <h:selectOneMenu> на первой панели: на соответствующей панели отображается правильный соответствующий dataTable. Однако на этот раз, когда я нажимаю на ссылку commandLink в таблице, чтобы просмотреть подробную информацию об этом элементе, я получаю информацию об элементе, который щелкнул в первый раз.

Если я пропущу rendered="#{faseController.invullingSelected}", то все работает нормально, но это приводит к путанице в представлении, поскольку третья панель теперь всегда отображается.

Все три панели расположены в одной форме. Мой поддерживающий боб - ViewScoped. Что я делаю неправильно? Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 17 января 2012

Это может произойти, если вы выполняете бизнес-логику в методе получения, а не в методе (действия) слушателя.Мне также интересно, если вам действительно нужно execute и render форма вся .Попытайтесь быть более точным в определении элементов, которые должны быть выполнены и / или воспроизведены.

Вопрос слишком широкий, а код недостаточно полный, чтобы точно определить реальную причину и предложитьготовое решение.

0 голосов
/ 17 января 2012

Попробуйте использовать это.

<a4j:commandLink action="#{faseController.selectInvulling}" execute="@this"
render="thirdPanelId" limitRender="true"/> 

Выполните только те компоненты, которые вы хотите обработать, и отобразите только те компоненты, которые необходимо обновить.

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