`

采用struts2防止重复提交后无法采用request.getParameter("xxx")得到页面隐藏框值解决方案(转)

阅读更多

采用struts2防止重复提交后无法采用request.getParameter("xxx")得到页面隐藏框值解决方案

 

      采用struts2防止重复提交方案采用的是

http://blog.csdn.net/mzyp/archive/2009/07/15/4350512.aspx

 


      该方案采用后,后来有一次页面增加一个批量调度按钮,需要从该页面取得某隐藏框值,结果同事试了多种方案也未解决该问题,其中包括

0.        <action name="BatchSchedule" class="vs.dascsl.action.datatransfer.SchedulerAction" method="batchSchedule">
           <!--<interceptor-ref name="completeStack"/>  -->
           <!--<interceptor-ref name="execAndWait"/>-->
           <!--  此段代码为作用是将request请求的参数传递到 action 中 -->    
           <!--<interceptor-ref name="model-driven"/>         -->          
           <!--<interceptor-ref name="params"/>           -->
          <!-- <result name="wait">jsp/ds_dm_mgr/wait.jsp</result>  -->  
           <result name="error" type="redirect-action">SchedulersList</result>
           <result name="success" type="redirect-action">SchedulersList</result>
        </action>

他又试了加上 <interceptor-ref name="servletConfig"></interceptor-ref> 用两种方式也得不到request,

1.HttpServletRequest request = ServletActionContext.getRequest();
2.HttpServletRequest request = (HttpServletRequest)ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_REQUEST);

 


     经过一番努力,我终于解决该问题,JSP及相关JAVA文件都没有改变,只改了struts.xml一个地方,参见如下:

        <action name="BatchSchedule" class="vs.dascsl.action.datatransfer.SchedulerAction" method="batchSchedule">
           <interceptor-ref name="completeStack"/>
           <interceptor-ref name="execAndWait"/>
           <interceptor-ref name="alias"/> <!--就加了此句-->
           <result name="wait">jsp/ds_dm_mgr/wait.jsp</result>              
           <result name="error" type="redirect-action">SchedulersList</result>
           <result name="success" type="redirect-action">SchedulersList</result>
        </action>

理论来源于

浅谈Struts2拦截器的原理与实现
     开始,我对解决该问题也没有把握,当看到上述资料中 有“ Alias Interceptor 在不同请求之间将请求参数在不同名字件转换,请求内容不变”,我看到一丝亮光,只有亮光当然还不行,经过几轮测试,这个亮光终于变成了康庄大道。

     

后记:

     以上方案又经严格测试,发现不够稳定。

     最终方案返璞归真:定义一个私有变量,变量与jsp页面隐藏框名称相同,并增加get/set方法。

     至于我同事提出的原来写法有

      ServletContext ctx = request.getSession().getServletContext();  

     由于request得不到,所以这种方式得到 ServletContext更是无从谈起!

     我解决方案如下:

     原来由于公共action已经写有

          public class BaseAction extends ActionSupport implements SessionAware,   

          ServletRequestAware, ServletResponseAware{

               .........

          }


    我又增加了一个实现接口类ServletContextAware,也即

          public class BaseAction extends ActionSupport implements SessionAware,   

          ServletRequestAware, ServletResponseAware ,ServletContextAware {

             .......

             protected ServletContext context;
             public void setServletContext(ServletContext arg0) {
                   this.context = arg0;   
             }                      

 


                   .........

          }


     由于 SchedulerAction继承于 BaseAction,故可直接引用context解决了这一个难题。

     从后来应用效果来看:超赞^_^

 


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mzyp/archive/2009/08/13/4437750.aspx

分享到:
评论

相关推荐

    java面试时候经常会问的一些问题.doc

    request.getAttribute() 用于获取当前请求中的属性,而 request.getParameter() 用于获取当前请求中的参数。 2. response.sendRedirect() 和 forward() 区别? response.sendRedirect() 用于重定向到一个新的 URL...

    java面试题集合java面试题集合.doc

    2. **request.getAttribute()与request.getParameter()的区别**: - `getAttribute()`获取的是对象,可以存储任意类型的数据,而`getParameter()`返回的是字符串,用于获取请求参数的值。 - `getAttribute()`的...

    java经典面试题(附答案)

    4. **静态包含与动态包含**:`&lt;%@include file="xxx.jsp"%&gt;`是静态包含,编译时合并到当前JSP页面;`&lt;jsp:include&gt;`是动态包含,运行时根据请求动态加载页面。 5. **List与Map的区别**:List是有序集合,元素可以...

    面试常遇到的问题

    2. `request.getAttribute()`和`request.getParameter()`的区别是什么? `getAttribute()`用于获取请求范围内的对象,返回的是Object类型,而`getParameter()`用于获取请求参数,返回的是String或String[]类型。 3...

    Ajax FireFox IE 乱码兼容问题

    本文将深入探讨这一问题,并提供详细的解决方案。 ### Ajax与字符编码 Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它主要通过在后台与服务器进行...

    java大型企业面试 笔试题 集合

    - `request.getParameter()`:用于获取HTTP请求中的参数值,返回的是字符串。 3. **响应重定向与转发**: - `response.sendRedirect()`:客户端重定向,浏览器发起新的HTTP请求,URL可见变化。 - `forward()`:...

    程序员需要知道

    - **异常处理不完整**:在 `catch` 块中只声明了 `Exception` 对象,但没有对其进行任何处理,这可能导致程序出现未知错误时无法得到适当的反馈。 改进后的代码可能如下所示: ```java try (Connection conn = ...

    最新Java面试宝典pdf版

    10、request.getAttribute() 和 request.getParameter() 有何区别? 88 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 88 12. jsp有哪些动作?作用分别是什么? 88 13、JSP的常用指令 89 14. JSP中动态...

    Java面试宝典-经典

    10、request.getAttribute() 和 request.getParameter() 有何区别? 88 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 88 12. jsp有哪些动作?作用分别是什么? 88 13、JSP的常用指令 89 14. JSP中动态...

    Java面试宝典2012版

    10、request.getAttribute() 和 request.getParameter() 有何区别? 88 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 88 12. jsp有哪些动作?作用分别是什么? 88 13、JSP的常用指令 89 14. JSP中动态...

    java面试题大全(2012版)

    10、request.getAttribute() 和 request.getParameter() 有何区别? 88 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 88 12. jsp有哪些动作?作用分别是什么? 88 13、JSP的常用指令 89 14. JSP中动态...

    java面试宝典2012

    10、request.getAttribute() 和 request.getParameter() 有何区别? 96 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 96 12. jsp有哪些动作?作用分别是什么? 97 13、JSP的常用指令 97 14. JSP中动态...

    JAVA面试宝典2010

    10、request.getAttribute() 和 request.getParameter() 有何区别? 88 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 88 12. jsp有哪些动作?作用分别是什么? 88 13、JSP的常用指令 89 14. JSP中动态...

    Java面试宝典2012新版

    10、request.getAttribute() 和 request.getParameter() 有何区别? 88 11. jsp有哪些内置对象?作用分别是什么? 分别有什么方法? 88 12. jsp有哪些动作?作用分别是什么? 88 13、JSP的常用指令 89 14. JSP中动态...

Global site tag (gtag.js) - Google Analytics