2013-05-20 3 views
-1

У меня есть богатый: popupPanel с содержанием:JSF компоненты ViewState теряется, когда я открываю богат: popupPanel

<rich:popupPanel id = "popupId"> 
    <h:panelGrid> 
     <h:form id="formId"> 
      <h:panelGrid> 
       // content, e.g. radiobuttons, dropdowns, panelGroups and other jsf and richfaces components , nested components 
      </h:panelGrid> 
     </h:form> 
    </h:panelGrid> 
</rich:popupPanel> 

и ссылку, чтобы открыть и повторно вызывать формы и всплывающие окна:

<a4j:commandLink actionListener="myListener();" render="popupId formId"> 

Я пробовал много значений render атрибута, такого как popupId или formId.

Когда я нажимаю на ссылку, всплывающее окно открывается, но у меня нет скрытого поля ввода в форме. Когда я пытаюсь выбрать какое-то радио или изменить значение для раскрывающегося списка (или любого другого действия), то первый submit ничего не делает, потому что отсутствует javax.faces.ViewState. После этого он снова появляется в форме, а второй подает и работает отлично.

Как это вызвано и как я могу его решить?

+0

Возможный дубликат действия [ вызывается только при втором нажатии] (http://stackoverflow.com/questions/10094615/a4jcomandbutton-action-is-only-invoked-on-second-click) – BalusC

ответ

1

Решение очень просто. Не для ajax-render компонентов с <h:form> внутри. Вставьте все компоненты внутрь и отрисуйте эти компоненты!

<rich:popupPanel id="popupId"> 
    <h:form id="formId"> 
     <h:panelGrid id="panelGridId"> 
      // content 
     </h:panelGrid> 
    </h:form> 
</rich:popupPanel> 

Не popupId, не formId !!!!!!!

<a4j:commandLink actionListener="someListener()" render="panelGridId" /> 

И тогда мы не будем терять javax.faces.ViewState идентификатор и все будет работать правильно!

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