Я в настоящее время пытаюсь проверить некоторые значения фронтенда с некоторыми методами серверной стороны (как группа) и сталкиваюсь с проблемами, имеющими дело с результатом.
Вот 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' показывает, что данные не определены. Мне нужно это, чтобы быть определенным, чтобы знать, показать ли диалог предупреждения.
Я могу подтвердить, что Bean.shouldBeConfirmed () метод действительно работает, и с правильными параметрами, и действительно возвращает правильное значение и даже устанавливает значение переменной Bean.booleanResult (который является нормальной булевской переменной Java). Что я делаю неправильно здесь?
У меня все точно так же, как у вас, и это работает для меня. Единственная разница в том, что у меня есть дополнительные атрибуты на jsFunction:
<a4j:form>
<a4j:jsFunction name="jsFunc1"
action="#{Bean.shouldBeConfirmed()}"
data="#{Bean.booleanResult}"
oncomplete="alert(data);"
ignoreDupResponses="true"
eventQueue="foo">
...
И мои данные (ваш booleanResult) - это int. Работает нормально.