2010-09-20 3 views
4

EDIT
наклоняет как получить rendered правильно работать с update атрибутами. Вот мои кодыJSF + Primefaces: Проблема с «оказанной» компонентой с помощью AJAX

 <ui:define name="left"> 
      <h:form> 
       <p:commandLink value="Hey" 
       actionListener="#{bean.setRenderComment}" 
       update="comment"/> 
      </h:form> 
     </ui:define> 
     <ui:define name="right"> 
      <h:panelGroup id="comment" rendered="#{bean.renderComment}"> 
       hello 
      </h:panelGroup> 
     </ui:define> 

renderComment является Булевы атрибуты внутри bean. setRenderComment в основном переключать состояние renderComment как этот

this.renderComment = !this.renderComment; 

вправо, каждый раз, когда я нажимаю на ссылку Hey, мне нужно обновить либо оказывать hello или выключить. Как я могу это исправить, так что я не нужно обновить

ответ

13

Я не использую Primefaces но RichFaces на моих проектах. Поэтому я не знаю, как процесс обновления выполняется с помощью Primefaces. Однако у меня есть идея, которую можно легко протестировать.

Ваша проблема может быть связанно с тем, что компонент для повторной визуализации (т.е. обновления) не найден на странице HTML. Если ваш атрибут rendered равен false, то <SPAN> с comment id: не, встроенный в созданную HTML-страницу. Таким образом, когда запрос Ajax получен на стороне клиента, механизм Ajax не может обновить этот <SPAN>, поскольку он не найден.

Так что вы можете сделать, это всегда делают ваш panelGroup и переместить атрибут rendered к вложенной <h:outputText>, который содержит сообщение Hello.

Вот что я предлагаю:

<h:panelGroup id="comment"> 
    <h:outputText value="Hello" rendered="#{bean.renderComment}"/> 
</h:panelGroup> 

Таким образом, panelGroup всегда будет обновляться после вызова Ajax, и он будет содержать Hello сообщение или нет, относительно стоимости renderComment атрибут вашего компонента.

+0

Спасибо. Оно работает :). Я объясняю, почему я использую 'panelGroup', потому что у меня есть много компонентов, которые я хочу включить или отключить, используя только один атрибут' rendered'. Если я должен это сделать, я думаю, я мог бы просто взять «panelGroup». Большое спасибо человеку: D –

1

Поскольку компонента с идентификатором comment не один из детей формы (UINamingContainer компонент), вам необходимо предварить ID с : поручить JSF к сканировать с «верхнего уровня».

Это должно сделать:

<p:commandLink value="Hey" 
    actionListener="#{bean.setRenderComment}" 
    update=":comment" /> 
+0

Ох, ничего себе. Я не знал, что «обновление» работает только на одном уровне. Что делать, если у меня несколько уровней. Я пытаюсь ':: comment', но это не работает. Можете ли вы посмотреть мой обновленный пост, пожалуйста? –

+0

@ Harry: romaintaz прибил его. – BalusC

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

  • Нет связанных вопросов^_^