2017-01-28 12 views
0

Мои запросы в веб-приложении (struts2) часто бывают тяжелыми, и для ответа требуется значительное время.Скрыть загрузчик (spin) в struts2

Я добавил несколько простых (просто html DIV и некоторые CSS) вращающиеся вершины ожидания после вызовов действий. a whirligig like this

Вращение вращается и при достижении цели действия загружается новый jsp, и вращение исчезает.

Проблема возникает, когда действие называется действием для загрузки данных, таких как файл excel (и я полагаю, даже если еще не пробовал, для pdf, загрузки файлов и т. Д. В таких случаях новый JSP не нужен загружен).

Я не могу найти способ остановить или скрыть вращение при завершении загрузки.

Я попытался остановить счетчик, используя событие onblur (применяется к div div, к контейнеру div, ко всему окну и т. Д.), Когда окно начало загружать файлы.

Итак, я полагаю, что системное окно при загрузке файлов не рассматривается браузером как истинное окно, и поэтому событие «onblur» бессмысленно!

Наконец, как я могу скрыть волчок, когда ответ начинает получать среднее значение, когда создается файл excel, или просто, когда окно загрузки системы закрыто (или открыто)?

+0

В более общем плане проблема может быть определена следующим образом: как я могу установить display = none в DIV? –

+0

нет проколов? если существует другой способ получить то, что мне нужно (insead div + css), это нормально! –

+0

Как вы загружаете данные? Отправьте код. –

ответ

0

Разделите свое действие загрузки на два действия. Первый из них должен вернуть JavaScript на успех и и второй, step2, действие должно вернуть поток на успех, как показано ниже:

step1.jsp

<script> $(document).ready(function() { 
closeBoxWait(previous_boxWait); 
window.location = '<s:url namespace="/" action="step2"/>'; 
}); </script> 

struts.xml

<action name="exportExcelBill" 
    class="jj.colmenjv.dlq.actions.BillAction" 
    method="exportBillToExcel"> 

    <interceptor-ref name="loginStack" /> 
    <result name="login">timeout.jsp</result> 

    <result name="success">step1.jsp</result> 
</action> 
<action name="step2" 
    class="jj.colmenjv.dlq.actions.BillAction" 
    > 

    <result name="success" type="stream"> 
     <param name="contentDisposition">attachment;filename="${reportFile}"</param> 
     <param name="contentType">application/vnd.ms-excel</param> 
     <param name="inputName">inputStream</param> 
     <param name="bufferSize">1024</param> 
    </result> 
</action> 
0

Посылка - я надеюсь, что это правильно, и что это один из тех случаев, когда ему разрешено добавлять ответ.
premise2 - Я не волшебник в Struts2 (? Но это уже ясно, не является)

Thanx Ясира, я попробовал свое драгоценное предложение, но я имею трудное время:
это мои новые распорки .xml

<action name="exportExcelBill" 
     class="it.colmenjv.dlq.actions.BillAction" 
     method="exportBillToExcel"> 
     <interceptor-ref name="loginStack" /> 
     <result name="login">timeout.jsp</result> 
     <result name="success">jsp/common/intermeanExcel.jsp</result> 
    </action> 
    <action name="completeExport" 
     class="it.colmenjv.dlq.actions.BillAction" 
     method="completeExport"> 
     <interceptor-ref name="loginStack" /> 
     <result name="login">timeout.jsp</result> 
     <result name="success" type="stream"> 
      <param name="contentDisposition">attachment;filename="${reportFile}"</param> 
      <param name="contentType">application/vnd.ms-excel</param> 
      <param name="inputName">inputStream</param> 
      <param name="bufferSize">1024</param> 
     </result> 
    </action> 

это intermeanExcel.jsp:

<head> 
    <script src="https://code.jquery.com/jquery-1.9.1.min.js"></script> 
    <script type="text/javascript" src="js/common/common.js"></script> 
</head> 

<body> 
    <%@ include file="./warningwait.jsp" %> 

    <script> 
     $(document).ready(function() { 
             closeBoxWait(previous_boxWait); 
             window.location = '<s:url namespace="/" action="completeExport"/>'; 
            }); 
    </script> 
</body> 

я добавил слишком строку (второй последний) к оригинальному способу (exportBillToExcel) для того, чтобы поместить в сессии потока данных

public String exportBillToExcel() { 
    XSSFWorkbook myWorkBook = new XSSFWorkbook(); 
    XSSFSheet mySheet = myWorkBook.createSheet(categ); 
    try { 

и т.д ... и т.д ... Я опускаю - ненужный на этот вопрос - тело метода, который работал хорошо, когда стоял один, и т.д ...

} 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
===> session.put("tmpstream", inputStream); 
    return SUCCESS; 
} 

для того, чтобы восстановить его в новом методе

public String completeExport() { 
    inputStream = (InputStream)session.get("tmpstream"); 
    logger.info("completeExport() - inputStream="+inputStream); 
    return SUCCESS; 
} 

но это журнал регистрации ошибок (даже если -first row- поток не является нулевым):

01/02 07:30:07| INFO [http-apr-10080-exec-6] (BillAction.java:704) - completeExport() - [email protected] 
01/02 07:30:07| ERROR [http-apr-10080-exec-6] (CommonsLogger.java:34) - Can not find a java.io.InputStream with the name [inputStream] in the invocation stack. Check the <param name="inputName"> tag specified f 
or this action. 
01/02 07:30:07| ERROR [http-apr-10080-exec-6] (CommonsLogger.java:38) - Exception occurred during processing request: Can not find a java.io.InputStream with the name [inputStream] in the invocation stack. Chec 
k the <param name="inputName"> tag specified for this action. 
java.lang.IllegalArgumentException: Can not find a java.io.InputStream with the name [inputStream] in the invocation stack. Check the <param name="inputName"> tag specified for this action. 
     at org.apache.struts2.dispatcher.StreamResult.doExecute(StreamResult.java:237) 
     at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186) 
     at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:367) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:271) 
     at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 
     at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176) 
     at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 
     at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265) 
     at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) 
     at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 
     at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 
     at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:238) 
     at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
     at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 
     at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:238) 
     at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 

где я ошибаюсь?

PS - укрытие прядильных работ! спасибо!