2010-10-13 1 views
0

У меня есть следующий код для выполнения, но он задает некоторый связанный с проблемой запрос ajax.Как синхронизировать a4j: jsFunction и actionListener в Jsf

ActionListener вызова на кнопку Нажмите

<a4j:commandButton value="Submit" alt="OligoWalk" styleClass="common_button" onclick="createNewLog();showProgressLayer();" oncomplete="parent.document.getElementById('resultFrm').src ='#{MyResearchView.resultToShow}';parent.reRenderLogSection();" actionListener="#{MyResearchView.executeTool}">  <f:attribute name="toolClass" value="com.sequerome.service.impl.tools.Oligowalk" /> 
<f:attribute name="toolId" value="#{ToolCustomeFormView.toolId}" /> <f:attribute name="toolName" value="#{ToolCustomeFormView.toolName}" />     <f:attribute name="inputParamFile" value="#{ToolCustomeFormView.inputParamFile}" /> 
<f:attribute name="paramMap" value="#{ToolCustomeFormView.toolParamBean.paramMap}" /> 
</a4j:commandButton> 

a4j:

  • функция Функция JsFunction

    <a4j:jsFunction name="createNewLog" 
        actionListener="#{MyResearchView.createNewLogEntry}" 
        oncomplete="parent.reRenderLogSection();executeTool();"> 
        <f:attribute name="toolId" value="#{ToolCustomeFormView.toolId}" /> 
        <f:attribute name="toolName" value="#{ToolCustomeFormView.toolName}"/></a4j:jsFunction> 
    
      createNewLog() должен завершить первую функцию
    1. executeTool() должен завершить после этого.

    В настоящее время он вызывает то же самое, но половина функции createNewLog() выполняет сначала, затем переходит к функции executeTool(). Здесь он выполняет некоторый код для выполнения и снова движется к функции createNewlog(). После этого createNewLog() выполняется, а затем executeTool() выполняется.

    <a4j:commandButton value="Submit" alt="OligoWalk" styleClass="common_button" onclick="createNewLog();showProgressLayer();" oncomplete="parent.document.getElementById('resultFrm').src ='#{MyResearchView.resultToShow}';parent.reRenderLogSection();" actionListener="#{MyResearchView.executeTool}">  <f:attribute name="toolClass" value="com.sequerome.service.impl.tools.Oligowalk" /> 
    <f:attribute name="toolId" value="#{ToolCustomeFormView.toolId}" /> <f:attribute name="toolName" value="#{ToolCustomeFormView.toolName}" />     <f:attribute name="inputParamFile" value="#{ToolCustomeFormView.inputParamFile}" /> 
    <f:attribute name="paramMap" value="#{ToolCustomeFormView.toolParamBean.paramMap}" /> 
    </a4j:commandButton> 
    
    <a4j:jsFunction name="createNewLog" 
        actionListener="#{MyResearchView.createNewLogEntry}" 
        oncomplete="parent.reRenderLogSection();executeTool();"> 
        <f:attribute name="toolId" value="#{ToolCustomeFormView.toolId}" /> 
        <f:attribute name="toolName" value="#{ToolCustomeFormView.toolName}"/></a4j:jsFunction> 
    
  • ответ

    0

    не уверен, что вы намереваетесь здесь. Некоторый код поможет. Существует событие javascript, называемое oncomplete для a4j: jsFunction. Я предполагаю, что один из подходов состоит в вызове других js-функций, когда это событие получено ...

    +0

    ОП не форматировал код, поэтому его проглотили. Я исправил форматирование кода. – BalusC

    0

    Симптомы могут быть результатом функции a4j: асинхронная функция. Я считаю, что происходит за кулисами:

    • createNewLog();
      • вызовы a4j: функция
      • a4j: функция посылает запрос
      • a4j: функция возвращает (запрос все еще происходит)
    • showProgressLayer();
      • вызовы a4j: функция
      • a4j: fucntion посылает запрос (запрос createNewLog случается наполовину сделано сейчас)
      • a4j: функция возвращает (запрос все еще происходит)
    • запрос ActionListener является выстрелил
      • запрос выполняется на сервере, возможно, в то время как createNewLog и showProgressLayer все еще работают

    Решение будет заключаться в добавлении queues со стороны клиента и synchronization со стороны сервера.

     Смежные вопросы

    • Нет связанных вопросов^_^