使用 A4J,如何重新渲染 JavaScript 函数,并在重新渲染后调用它

using A4J, how do I rerender a javascript function, and call it after rerendering?

本文关键字:新渲染 调用 JavaScript A4J 何重新 使用 函数      更新时间:2023-09-26

例如,我试过

<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()代码的部分外,所有工作都有效,我使用 firebug 检查了 ajax 响应,它带有预期的新 JavaScript 代码,但是当我调用 reallyUpdateIt() 时,旧代码被触发了。

我正在使用 JSF 1.2,富人脸 3.3.3,

事实证明,使用

<a4j:region id="scriptSuggested" > 不会生成 A4J 可以重新渲染的 html 部分,我不得不使用 <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>