我正在用struts2制作一个新项目。一切都好,但我不知道在这种情况下发生了什么。
当业务逻辑失败时,项目有链式重定向,它返回到最后一个 JSP(最后一个动作),成功地重新加载所有页面而无需编程工作(它也重新加载旧请求)。
无论如何,当 Jakarta 检测到用户正在尝试上传一个大文件(默认配置为 20 MB)时,动作的逻辑知道这一点并强制链式重定向到最后一个动作。
我调试这个逻辑。我有一个拦截器可以做几件事,在典型的行中:
result = invocation.invoke();
当 Jakarta 强制链重定向时,拦截器会捕获这个新请求,但不会通过调用方法到达动作。
我不知道为什么会这样。当相同的动作强制进行相同的链重定向时,因为其他验证(如 struts2 的 FileUpload 拦截器或拥有验证)都可以正常工作。
我在程序中解决了避免重定向,但我想知道为什么我不能使用我的正常模式。
struts.xml 的某些部分:
<constant name="struts.multipart.maxSize" value="20971520" />
如果所有验证都很好,MostrarResumenSubsanacion 的结果就是下一步操作。
如果某些验证失败,MostrarRespuestaSubsanaciones 的结果是最后的操作。
ErrorJakarta 的结果是解决问题的新行。
<action name="MostrarResumenSubsanacion" class="struts.expedientes.subsanaciones.MostrarResumenSubsanacion">
<param name="conseguirConexion">SI</param>
<param name="seguimiento">SI</param>
<interceptor-ref name="interceptorFileStack"></interceptor-ref>
<result name="MostrarRespuestaSubsanaciones" type="chain">MostrarRespuestaSubsanaciones</result>
<result name="ErrorJakarta">/forms/struts/expedientes/subsanaciones/ventanaRespuestaSubsanacion.jsp</result>
<result name="MostrarResumenSubsanacion">/forms/struts/expedientes/comun/ventanaResumen.jsp</result>
</action>
<action name="MostrarRespuestaSubsanaciones" class="struts.expedientes.subsanaciones.MostrarRespuestaSubsanaciones">
<param name="conseguirConexion">SI</param>
<param name="seguimiento">SI</param>
<interceptor-ref name="interceptorBaseStack"></interceptor-ref>
<result name="MostrarVentanaSubsanaciones">/forms/struts/expedientes/subsanaciones/ventanaRespuestaSubsanacion.jsp</result>
<result name="input">/forms/struts/expedientes/subsanaciones/ventanaRespuestaSubsanacion.jsp</result>
</action>