Подтвердить что ты не робот

Как правильно получить доступ к полю данных в результате a4j: jsFunction

В настоящее время я пытаюсь проверить некоторые значения front-end с помощью некоторых методов на стороне сервера (как группы), и я столкнулся с проблемами, связанными с результатом.

Вот кнопка XHTML, которая запускает все:

<h:commandButton action="#{Bean.save()}" 
        value="Save" 
           id="save" 
      onclick="checkForConfirmation();" />

И javascript, часть которого вызывает кнопка, другая часть которой jsFunction вызывает

function checkForConfirmation()
{
         var name = document.getElementById("path:to:name").value;
         var address = document.getElementById("path:to:address").value;
         var city = document.getElementById("path:to:city").value;
         var state = document.getElementById("path:to:state").value;
         var zip = document.getElementById("path:to:zip").value;

         jsFunc1(name, address, city, state, zip);
}
function showConfirmPrompt()
{
            if(confirm('Confirmation before save')) 
            {
                return true;
            }

            return false; 
}

И, наконец, jsFunction, являющийся проблематичной частью:

<a4j:form>
        <a4j:jsFunction name="jsFunc1" action="#{Bean.shouldBeConfirmed()}" data="#{Bean.booleanResult}" oncomplete="alert(data); if (data) {showConfirmPrompt();}">
            <a4j:actionparam name="param1" assignTo="#{Bean.nameToBeValidated}"/>
            <a4j:actionparam name="param2" assignTo="#{Bean.addressToBeValidated}"/>
            <a4j:actionparam name="param3" assignTo="#{Bean.cityToBeValidated}"/>
            <a4j:actionparam name="param4" assignTo="#{Bean.stateToBeValidated}"/>
            <a4j:actionparam name="param5" assignTo="#{Bean.zipToBeValidated}"/>
        </a4j:jsFunction>
    </a4j:form>

Проблема заключается в том, что в конце этой цепочки событий предупреждение (данные) в атрибуте oncomplete показывает, что данные undefined. Мне нужно, чтобы это было определено для того, чтобы узнать, показывать ли диалог предупреждения.

Я могу подтвердить, что метод Bean.shouldBeConfirmed() действительно работает и с правильными параметрами и действительно возвращает правильное значение и даже устанавливает значение переменной Bean.booleanResult(которая является нормальный java boolean). Что я здесь делаю неправильно?

4b9b3361

Ответ 1

Хотя это очень старый вопрос, у меня была такая же проблема с Richfaces 4 M3. Параметры, предложенные Ев, не сработали. Так называются richfaces JIRA. В соответствии с этим, это ошибка (которая находится в режиме "не исправлять", не знаю почему!) Поэтому на данный момент обходным путем является использование event.data вместо data в обработчике oncomplete. Я тестировал, и он работает:)

Ответ 2

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

    <a4j:form>
    <a4j:jsFunction name="jsFunc1" 
        action="#{Bean.shouldBeConfirmed()}" 
        data="#{Bean.booleanResult}" 
        oncomplete="alert(data);"
        ignoreDupResponses="true"
        eventQueue="foo">
        ...

И мои данные (ваш booleanResult) - это int. Прекрасно работает.

Ответ 3

У меня также возникает одна и та же проблема. В случае булевых результатов нам нужно написать полное имя метода вместо удаления getter... как в вашем случае это должно быть # {Bean.isBooleanResult}.... Дайте мне знать, если проблема с лицом...