Как получить событие ajax для запуска из диалога p: - PullRequest
1 голос
/ 04 августа 2011

Итак, большую часть сегодняшнего дня я был в тупике, пытаясь вызвать метод в своем компоненте поддержки, когда компонент меняет значения.Все работает правильно, если мои компоненты находятся за пределами <p:dialog>, однако при вложении внутрь диалога сторона сервера никогда не происходит.Первоначально я работал с элементом управления <p:calendar>, но заметил, что он также не работает с простым inputText.Работает следующий пример:

<h:panelGrid columns="3">
    <h:outputText value="Start"/>
    <p:inputText id="startOfRange" value="#{myBean.startRange}" valueChangeListener="#{myBean.startChanged}">
        <p:ajax event="change" update="play"/>
    </p:inputText>
    <h:outputText id="play" style="margin-left: 10px;" value="#{myBean.startRange}"/>
</h:panelGrid>

Мой метод bean-компонента выглядит как

public void startChanged(ValueChangeEvent event) { }

Этот метод вызывается после вкладки из inputText, однако при переносе, как показано ниже, метод никогда не вызываетсявызывается:

<p:dialog widgetVar="efDlg" zindex="10" appendToBody="true" header="Create Custom Date Range"
      modal="true" height="375" width="450" resizable="false" closable="false" >
<h:panelGrid columns="4">
    <h:outputText value="Start"/>
    <p:inputText id="startOfRange" value="#{myBean.startRange}" valueChangeListener="#{myBean.startChanged}">
        <p:ajax event="change" update="play"/>
    </p:inputText>
    <h:outputText id="play" style="margin-left: 10px;" value="#{myBean.startRange}"/>
    <p:inputText id="endOfRange" value="#{myBean.endRange}" valueChangeListener="#{myBean.endChanged}"/>
</h:panelGrid>
<div class="customRangeButtons">
    <span>
        <p:commandButton value="Cancel" onstart="efDlg.hide();" actionListener="#{myBean.cancelCustomDateRange}" update="pGraphs"/>
    </span>
    <span style="margin-left: 300px;">
        <p:commandButton  value="Ok" type="submit" onstart="efDlg.hide();" action="#{myBean.saveCustomDateRange()}" update="pGraphs"/>
    </span>
</div>    
</p:dialog>

Примечание. Я использую Primefaces 2.2.1 с Mojarra 2.1.0.Любые идеи о том, почему я не могу получить метод startChanged для вызова, когда значение изменилось?

Ответы [ 2 ]

2 голосов
/ 05 августа 2011

Может быть, я ошибаюсь по этому поводу (у меня дома нет кода проекта для проверки), но разве это не так:

<p:ajax event="change" update="play"/>

должно быть:

<p:ajax event="valueChange" update="play"/>

Я знаю, что большинство значений Ajax event похоже на обработчики событий JavaScript с удаленным 'on', но valueChange является специальным значением в тегах JSF Ajax.

Для справки, я иногда соединяю два дочерних тега Ajax внутри inputText, например:

<p:ajax event="valueChange" process="@this" update="whatever"/>
<p:ajax event="keyUp" process="@this" update="whatever"/>

Это будет касаться каждого нажатия клавиши при его вводе, а также копирования и вставки и потери фокуса на родительском вводимом тексте.

0 голосов
/ 16 ноября 2011

Я тоже сталкивался с такой же проблемой.Я также использую одну форму и никакой формы внутри диалога.Пока у меня нет appendToBody = "true" для моего диалога, входные значения и ajax и submit происходят правильно.Как только я добавлю этот атрибут с true, для лучшего / правильного рендеринга входные значения не будут приняты.

...