Передать параметр из JSP в Interceptor

Как я могу поймать этот параметр в своем пользовательском перехватчике 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>

person kozla13    schedule 05.11.2012    source источник


Ответы (2)


РЕДАКТИРОВАТЬ 2: если ваш перехватчик не может получить параметры запроса, я предлагаю атомарный подход к проблеме. Пробуйте маленькие шаги, решайте проблемы одну за другой. В вашем случае попробую так:

1) Поместите отладочный «привет-перехватчик» внутри вашего перехватчика, чтобы увидеть, действительно ли вызов вашего действия проходит ЧЕРЕЗ ваш пользовательский перехватчик.

Если нет: проверьте свои настройки (перехватчик, стек перехватчиков, пакеты, действия и т. д.).

Если да:

2) Поместите обычную переменную в форму, которую вы публикуете, классическим способом (не ajax или что-то в этом роде, просто переменную <s:hidden name="foo" value="blabla"/> внутри вашей формы в JSP, отправленную с помощью кнопки <s:submit к вашему действию (action сопоставлен для использования стека перехватчика с вашим пользовательским перехватчиком). Попробуйте распечатать значение этой переменной из перехватчика.

Если переменная имеет значение null: снова проверьте сопоставления действий, используйте модуль Firebug Net, чтобы увидеть, действительно ли параметры публикуются, и т. д.

Если переменная читается:

тогда проблема заключается в переменной JQGrid, проверьте, как вы ссылаетесь на нее в JSP и что выходит из страницы с помощью Firebug еще раз.

Так далее...

Я предлагаю вам использовать новый JSP только с вашими вещами внутри, с новым действием для отображения и получения результата, с пустым execute()... просто очень-очень крошечный скелет для проверки вашего кода, чтобы убедиться, что ничего внешнего не мешает вверх по рабочему потоку...


РЕДАКТИРОВАТЬ: ваша конфигурация Interceptors выглядит нормально (за исключением 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();
}
person Andrea Ligios    schedule 05.11.2012
comment
Затем я проверю 1) Используемый вами стек Inteceptor, возможно, вы не используете ParamInterceptor; 2) Используйте модуль NET Firebug, чтобы увидеть, действительно ли параметр выводится страницей в запросе. Опубликуйте свою конфигурацию struts для получения дополнительной помощи... - person Andrea Ligios; 07.11.2012
comment
мне нужно это, чтобы сохранить мои настройки сетки (около 50 сеток в проекте) в базе данных, в случае, если пользователь изменит макет сетки и покинет страницу, все настройки будут сохранены. я немного изменил свою тактику. Сначала я собирался идентифицировать каждую сетку параметром, но передумал. Теперь я буду сохранять/загружать настройки сетки из базы данных, когда пользователь входит в систему. Я считаю, что это лучший подход, чем метод params. В конце концов, это не сработало с параметрами (они всегда равны нулю, я не знаю почему). Я считаю, что это должно сработать, и проблема в моих перехватчиках. Огромное спасибо - person kozla13; 08.11.2012
comment
Если вы сохраните настройки сетки при входе в систему, вы никогда не обновите настройки сетки O_o, вы должны сохранить их при выходе из системы, но выход из системы трудно перехватить. Для нулевой переменной см. отредактированный ответ (я редактирую прямо сейчас). Спасибо, что приняли это. - person Andrea Ligios; 08.11.2012
comment
настройки сетки уже сохранены в файлах cookie, мне нужно только обновить значения, если это необходимо. Ваш ответ очень помог, спасибо - person kozla13; 08.11.2012

Попробуй это. У меня это работало в 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"); 
person Prabhakar Manthena    schedule 14.05.2013