Используя A4J, как мне отрендерить функцию javascript и вызвать ее после перерисовки?
Например я пробовал
<a4j:region id="scriptSuggested" >
<f:verbatim>
<script>
reallyUpdateIt = function () {
// javascript code that changes after aj4 ajax call is triggered
}
</script>
</f:verbatim>
<a4j:jsFunction reRender="scriptSuggested" ignoreDupResponses="true" ajaxSingle="true" name="updateSuggestionValues" action="#{bean.action}" oncomplete="reallyUpdateIt();">
<a4j:actionparam name="userInput" assignTo="#{bean.input}" />
</a4j:jsFunction>
</a4j:region>
Я ожидаю, что вызов функции JavaScript
updateSuggestionValues('val');
собирается сделать действие
#{bean.action}
и после этого он перенесет регион scriptSuggested
и, наконец, позвонит reallyUpdateIt()
,
все работает кроме части обновления кода reallyUpdateIt()
Я проверил ответ ajax с помощью firebug, и он приходит с ожидаемым новым кодом javascript, но когда я звоню reallyUpdateIt()
, старый код срабатывает.
Я использую JSF 1.2, richfaces 3.3.3,
1 ответ
Решение
Получается с помощью <a4j:region id="scriptSuggested" >
не генерирует HTML-раздел, который A4J может перерисовать, я должен был использовать <a4j:outputPanel>
, так что теперь он обновляет функцию, мой код теперь выглядит так:
<a4j:region >
<a4j:outputPanel id="scriptSuggested">
<f:verbatim>
<script>
reallyUpdateIt = function () {
// javascript code that changes after aj4 ajax call is triggered
}
</script>
</f:verbatim>
<a4j:jsFunction reRender="scriptSuggested" ignoreDupResponses="true" ajaxSingle="true" name="updateSuggestionValues" action="#{bean.action}" oncomplete="reallyUpdateIt();">
<a4j:actionparam name="userInput" assignTo="#{bean.input}" />
</a4j:jsFunction>
</a4j:outputPanel>
</a4j:region>