2017-02-06 4 views
0

Я этот код:метод ActionListener не вызывается из диалогового CommandButton

<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:p="http://primefaces.org/ui" > 

    <h:form> 
     <h1 class="page-header "> <i class="fa fa-tachometer"></i> Dashboard</h1> 
     <p:outputPanel id="contentPanel"> 
      <p:commandButton value="Añadir caso de prueba" actionListener="#{testCaseBean.prepareCreateTestCase}" oncomplete="PF('addTestCaseDialog').show();" process="@this" update=":dialog"/> 
      <p:dataTable> 

      </p:dataTable> 
     </p:outputPanel> 
    </h:form> 
    <p:dialog header="Crear caso de prueba" modal="true" id="dialog" widgetVar="addTestCaseDialog" closable="false"> 
     <h:form id="addTestCaseDialogForm"> 
      <p:panelGrid columns="4" styleClass="ui-noborder"> 
       <p:outputLabel for="testCaseName" value="Nombre del caso de prueba:"/> 
       <p:inputText id="testCaseName" value="#{testCaseBean.testCase.testCaseName}" required="true"/> 
       <p:outputLabel for="assignedTask" value="Tarea relacionada:"/> 
       <p:inputText id="assignedTask" value="#{testCaseBean.testCase.assignedTask}" required="true"/> 
       <p:outputLabel for="isRegressive" value="Regresivo:" /> 
       <p:selectBooleanCheckbox id="isRegressive" value="#{testCaseBean.testCase.isRegressive}"/> 
      </p:panelGrid> 
      <p:commandButton value="Guardar" actionListener="#{testCaseBean.createTestCase}" oncomplete="PF('addTestCaseDialog').hide()" process="addTestCaseDialogForm"/> 
      <p:commandButton value="Cancelar" onclick="PF('addTestCaseDialog').hide()" immediate="true" /> 
     </h:form> 
    </p:dialog> 

И у меня проблема: метод ActionListener из диалогового CommandButton не вызывается, и я не» Знаю почему. Если поместить это в то CommandButton:

<p:commandButton value="Guardar" actionListener="# {testCaseBean.createTestCase}" oncomplete="PF('addTestCaseDialog').hide()" process="@this"/> 

Метод вызывается, но форма не обрабатывается.

Любая помощь?

Спасибо!

ответ

1

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

Но если нет надлежащих < h: messages> теги на ваших страницах или шаблонах, ошибки проверки не отображаются нигде!

Убедитесь, что вы также надлежащее < час: Сообщения> или < р: Сообщения> показать возможные ошибки проверки.

Мы провели несколько часов с этим вопросом, пока не понял его ...

+0

Это была ошибка проверки, которая не отображалась. Я видел это перед тем, как вы ответили. Спасибо, в любом случае! – rlopezo

0

Добавить процедуру = "@ this" в commandButton.

Кроме того, изучение этого руководство от BalusC:

commandButton/commandLink/ajax action/listener method not invoked or input value not updated

+0

Я попытался с <р: CommandButton значение = "Guardar" ActionListener = "# {} testCaseBean.createTestCase" OnComplete = "PF ('addTestCaseDialog'). hide() "process =" @ this, addTestCaseDialogForm "/> но он все еще не работает. – rlopezo

+0

Изучите ссылку от BalusC. Если вы обработаете = "@ form", тогда будут отправлены все поля формы. –

1

PrimeFaces обеспечивает частичную функцию рендеринга и вид обработки на основе стандартного JSF 2 API, для того, чтобы выбрать то, что для обработки в JSF lifecyle и что делают в конце с ajax.

Есть несколько зарезервированных ключевых слов, которые служат помощниками.

- @ это: Компонент, который вызывает PPR обновляется

- @ родителей: Родитель триггера PPR обновляется.

- @ форма: Инкапсуляция форма триггера PPR обновляется

- @ никто: PPR не изменяет DOM с ответом AJAX.

- @ all: Весь документ обновляется как в запросах без аякса.

При визуализации частичной страницы отображаются только указанные компоненты, аналогично в частичной обработке обрабатываются только определенные компоненты. Обработка означает выполнение значений запроса заявки, Этапы процесса проверки, обновления модели и вызова прикладных процессов JSF только для определенных компонентов .

Вернуться к вашей проблеме, вы должны использовать процесс @form

Надеется, что это может помочь вам.

+0

Как использование '@ form' отличается от явного использования (относительного) идентификатора формы? И '@ form' является значением по умолчанию: http://stackoverflow.com/questions/25339056/understanding-primefaces-process-update-and-jsf-fajax-execute-render-attributes – Kukeltje

+0

@Kukeltje Оба не отличаются. В некоторых случаях, когда вы не используете идентификатор формы и не заботитесь об этом, вы просто добавляете атрибут (prependId = "false") в свою форму и добавляете атрибут (process = "@ form") к компоненту отправки такие как p: commandButton ... и т. д. – Mankeomorakort

+0

, если они не отличаются друг от друга, ваш не сможет. И лучше всего * никогда не использовать prependId = "false" http://stackoverflow.com/questions/7415230/uiform-with-prependid-false-breaks-fajax-render – Kukeltje

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