0

如何在我的 Struts2 自定义拦截器中捕获此参数,从 JSP 页面发送?

<s:url var="remoteurl" action="jsontable">
    <s:param name="gridName">gridTableID</s:param>
</s:url>
  <sjg:grid
        id="gridTableID"

        caption="Customer Examples (Local Data)"
        href="%{remoteurl}"
        gridModel="gridModel"
        rowNum="-1"
        hidegrid="true"
....

编辑:我的自定义堆栈:

<interceptors>
            <interceptor name="logingInterceptor" class="com.interceptors.LoggingInterceptor"></interceptor>
            <interceptor-stack name="newStack">
                <interceptor-ref name="logingInterceptor" />
                <interceptor-ref name="defaultStack" />
            </interceptor-stack>
        </interceptors>
        <default-interceptor-ref name="newStack"></default-interceptor-ref>
4

2 回答 2

1

编辑 2:如果您的拦截器无法获取请求参数,我建议采用原子方法解决问题。尝试小步骤,一一解决问题。在你的情况下,我会尝试如下:

1)在您的拦截器中放置一个调试“hello拦截器”,以查看对您的操作的调用是否实际上是通过您的自定义拦截器传递的。

如果不是:检查您的设置(拦截器、拦截器堆栈、包、操作等)。

如是:

2)以经典方式将普通变量放入您发布的表单中(不是ajax或其他东西,只是<s:hidden name="foo" value="blabla"/>JSP中表单内的一个变量,通过<s:submit按钮发布到您的操作(映射为使用拦截器堆栈的操作)自定义拦截器)尝试从拦截器中打印出该变量的值。

如果变量为空:再次检查您的操作映射,使用 Firebug Net 模块查看参数是否实际发布,等等。

如果读取变量:

那么问题出在 JQGrid 的变量中,请检查您在 JSP 中引用它的方式以及再次使用 Firebug 出现的页面。

ETC...

我建议你使用一个新的 JSP,里面只有你的东西,用一个新的动作来显示和接收结果,用一个空的 execute()... 只是一个非常小的骨架来测试你的代码,确保没有外部的东西弄乱向上工作流...


编辑:您的拦截器配置看起来不错(除了defaultStack代替default-stack,但我很确定它是一样的)。

您的所有操作都<package>在其中<interceptors>定义的相同吗?


为什么在 Interceptor 上而不是在 Action 上?您需要如何处理这些数据?

顺便说一句,这是代码:

public String intercept(ActionInvocation invocation) throws Exception {

   final ActionContext context = invocation.getInvocationContext();
   HttpServletRequest request = (HttpServletRequest) context.get(StrutsStatics.HTTP_REQUEST);

   String gridName = (String) request.getParameter("gridName");

   /* do something */

   return invocation.invoke();
}
于 2012-11-05T17:27:14.187 回答
0

试试这个。它在 struts 2.0.14 中对我有用。

public String intercept(ActionInvocation ai) throws Exception {
            ActionConfig config  = ai.getProxy().getConfig();  
            Map parameters       = config.getParams();  
            String menuId        = (String)parameters.get("empName"); 
于 2013-05-14T11:20:27.187 回答