将参数从JSP传递给Interceptor

时间:2012-11-05 17:13:08

标签: jsp struts2 interceptor interceptorstack

如何在我的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>

2 个答案:

答案 0 :(得分:1)

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

1)在你的拦截器中放置一个调试“hello interceptor”,看看对你的动作的调用是否实际上是通过了你的自定义拦截器。

如果没有:检查你的设置(拦截器,拦截器 - 堆栈,包,操作等)。

如果是:

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

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

如果读取变量:

然后问题出现在JQGrid的变量中,检查你在JSP中引用它的方式以及再次使用Firebug从页面中传出的内容。

等等...

我建议你使用一个只有你内容的新JSP,一个用于显示和接收结果的新动作,一个空的execute()...只是一个非常小的骨架来测试你的代码确定什么都没有外部正在搞乱这个问题...


编辑:你的拦截器配置似乎没问题(defaultStack代替default-stack除外,但我很确定它是一样的。)

您的所有操作是否都在定义<package>的{​​{1}}内?


为什么在Interceptor而不是Action?你如何处理这些数据?

顺便说一下,这是代码:

<interceptors>

答案 1 :(得分: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"); 
相关问题