2010-12-10 1 views
1

У меня проблема с параметрами, переданными в URL-адресе.Struts 2.0.14 Параметры GET не являются URLDecoded, это ошибка?

Пусть говорят, запрос: /struts/MyAction.action?param=foo%40bar.com

поле действие получает поле "PARAM" установлено значение "Foo% 40bar.com", что ошибка, или я слишком много ожидаю от Струтов?

Моя интуиция говорит мне, что я должен получить значение: «[email protected]», как, например, произойдет, если я передам этот параметр как поле формы POST.

Я использую стек перехватчика по умолчанию, и мой класс действия расширяет ActionSupport. Я получаю некоторое поведение на WebSphere6.1 & GlassFish2.1.

Благодаря


Привет Снова,

Проблема была вызвана ошибкой в ​​реализации прокси. Мы создали собственный прокси-сервер, который стоял перед веб-приложением. Он кодировал параметры URL во второй раз, и именно поэтому в Struts у меня было% 40 вместо @. Ошибка исправлена ​​и параметры передаются правильно.

Спасибо за вашу помощь

ответ

2

Я не думаю, что Struts2 отвечает за декодирование параметров, а контейнер сервлета например, Tomcat, Jetty и т. Д.

0

В чем проблема с параметрами? На что вы надеялись, что поле параметров будет настроено?

Вы можете написать конвертер пользовательского типа, если вы хотите, чтобы ваше свойство Action было преобразовано по-разному так, как это делает Struts.

1

Ваша интуиция правильная, вы должны получить «[email protected]». Со следующим испытанием struts версии 2.0.14 я мог бы ввести! @ # $ # $^$ &% # $% & в a и отобразить его на другой странице без проблем.

я тестировал голые кости распорок 2.0.14 приложение с формой, которая принимает строку:

<s:form action="form-view.action" method="GET"> 
    <s:textfield label="email" name="email"/> 
    <s:submit/> 
</s:form> 

Базовый класс действий (заметим, с stuts2 в этой версии вам не нужно сеттеры/добытчиками):

package struts2; 

import com.opensymphony.xwork2.ActionSupport; 

public class FormViewAction extends ActionSupport{ 
    public String email; 
} 

И очень простой дисплейная страница, содержащая:

<s:property value="email"/> 

Вот struts.x мл:

<struts> 
    <constant name="struts.enable.DynamicMethodInvocation" value="false" /> 
    <constant name="struts.devMode" value="true" /> 
    <package namespace="" name="example" extends="struts-default"> 
    <action name="form-view" class="struts2.FormViewAction"> 
     <result>/form-view.jsp</result> 
    </action> 
    </package> 
</struts> 

Должна быть проблема с конфигурацией ... Вы строите с maven? Почему вы используете версию 2.0.14 вместо 2.2.1? Так же, как в стороне, я сдал тестовое приложение с 2.2.1 до 2.0.14, и это заняло около 5 минут. Я не думаю, что есть серьезные препятствия от перехода на текущую версию, которая даст вам обновленную документацию.

Я запустил это на Glassfish 3.0.1.

Если вы не строите с maven, пожалуйста, перечислите банки в вашей библиотеке, файлы web.xml и struts.xml и, если возможно, минимальные формы. Jsp, display.jsp и класс Action для воспроизведения проблемы.

+0

Вы должны использовать геттеры и сеттеры, а не обнажать поля как общедоступные. Это всего лишь общая передовая практика на Java. –

+0

С помощью стойки вы должны выполнять валидацию в методах валидации, геттер и сеттер должны делать ничего, кроме get/set, ограничения параметров также обрабатываются в другом месте ... Классы в действиях тонкие, поэтому вам не нужно много изоляции, поскольку такой (и с рефакторингом IDE очень просто). В общем, это хорошая идея, но, как я делаю действия, преимущества кажутся довольно абстрактными, а не добавлением их улучшает читаемость. OT просто FYI, hibernate может даже разрешить настройку частных полей (через переработку байт-кода) говорить об экзотике! Я согласен, что get/set - это «лучшая практика», но это не всегда лучше. – Quaternion

+1

Привет, это не форма, а ссылка на действие в созданном письме. Путь к классам выглядит нормально, и мы не получаем тревожного вывода в журналах. Я попробую Struts 2.2.1 и посмотреть, не изменит ли он что-нибудь –

0

Как указано в радоне, контейнер Servlet отвечает за декодирование значений параметров в HttpServletRequest. Если ваши значения не декодируются URL-адресом, то что-то отключено.

Servlet Tutorial: Handling Form Data

Во-первых, какая версия API сервлетов вы используете? 2,5? 2,4? У вас есть правильная схема XSD, определенная в вашем web.xml для версии, которую вы используете? Кроме того, проверьте, соответствует ли используемая вами версия той, которая предоставляется вашим сервером приложений.

Смежные вопросы