2013-09-13 3 views
1

У меня возникла проблема с формой, не вызывающей ее метод actionButton. Когда я отправляю форму без предварительного обновления (не выбирая ни одного узла в дереве), метод срабатывает просто отлично.Основные элементы Обновленная форма Ajax не запускает действие commandButton

Как только форма обновлена ​​Ajax, commandButton больше не будет вызывать ее действие.

Вот код JSF:

<p:layoutUnit position="center"> 
    <p:tree orientation="horizontal" value="#{flightTypeController.tree}" var="node" 
     selectionMode="single" selection="#{flightTypeController.selectedNode}"> 
     <p:ajax event="select" listener="#{flightTypeController.onNodeSelect}" update=":typesTree"/> 

     <p:treeNode> 
      <h:outputText value="#{node.name}"/> 
     </p:treeNode> 
    </p:tree> 

    <h:form id="typesTree"> 
     <p:inputText disabled="true" id="outputParent" value="#{flightTypeController.selectedOne.name}"/> 
     <p:inputText id="outputName" value="#{flightTypeController.current.name}"/> 


     <p:commandButton ajax="false" icon="ui-icon-disk" value="#{bundle.general_create}" action="#{flightTypeController.create()}"/> 
    </h:form> 
</p:layoutUnit> 

И ява слушатель:

public void onNodeSelect(final NodeSelectEvent event) { 
    final Object res = event.getTreeNode().getData(); 
    if (res instanceof FlightType) { 
     selectedOne = (FlightType) res; 
    } else { 
     selectedOne = null; 
    } 
} 

Я уже проверить bible и JS Fix, но без успеха BalusC в.

Я видел подобное поведение довольно часто (и должен был найти обходные пути), поэтому я мог бы неправильно понять что-то фундаментальное.

О, да, я проверил несколько раз: в моем коде нет вложенных форм.

+0

Может быть, 'selectedOne' является' null'? Вы проверили журнал своего сервера на наличие исключений? – user1983983

+0

selectedOne оценен и действителен. Журнал сервера очищен на 100%. – Psyx

ответ

1

JS fix, который вы нашли, подключен jsf.ajax.addOnEvent, который активируется только <f:ajax>, а не компонентами PrimeFaces, которые используют jQuery под обложками.

Для покрытия PrimeFaces Ajax запросов, а также, захватить текущую версию JS fix (я недавно обновил этот пост) и добавьте следующие строки, чтобы применить это исправление по запросам Ajax Jquery, а также:

$(document).ajaxComplete(function(event, xhr, options) { 
    if (typeof xhr.responseXML != 'undefined') { // It's undefined when plain $.ajax(), $.get(), etc is used instead of PrimeFaces ajax. 
     fixViewState(xhr.responseXML); 
    } 
} 

Отказ от ответственности : Я не пробовал ваш конкретный случай использования. Но, теоретически, он должен решить вашу проблему.

+0

Спасибо, я пробовал это, и fixViewState вызывается правильно, однако 'getViewState (responseXML)' возвращает значение null (у моего ответа, похоже, есть элемент 'update'). – Psyx

+0

Какая версия PF? Ответ должен содержать ''. – BalusC

+0

PF 3.5. '' присутствует в ответе. – Psyx

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