Struts 2.0.14 GET-параметры не имеют URLDecoded, это ошибка? - PullRequest
1 голос
/ 10 декабря 2010

У меня проблема с параметрами, переданными в URL.

Допустим, запрос: /struts/MyAction.action?param=foo%40bar.com

Поле действия получает для поля «param» значение «foo% 40bar.com», это ошибка или я ожидаю слишком многого от Struts?

Моя интуиция подсказывает мне, что я должен получить значение: "foo@ bar.com ", как, например, произошло бы, если бы я передал этот параметр в качестве поля формы POST.

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

Спасибо


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

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

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

Ответы [ 4 ]

2 голосов
/ 11 декабря 2010

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

1 голос
/ 14 декабря 2010

Ваша интуиция верна, вы должны получить "foo@bar.com". В следующем тесте стоек версии 2.0.14 я мог ввести! @ # $ # $ ^ $ &% # $% & В поле from и отобразить его на другой странице без проблем.

Я протестировал приложение 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.xml:

<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, перечислите jar-файлы в вашей библиотеке, ваши файлы web.xml и struts.xml и, если возможно, минимальный form.jsp, display.jsp и класс Action для воспроизведения проблемы.

0 голосов
/ 14 декабря 2010

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

Учебное пособие по сервлету: обработка данных формы

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

0 голосов
/ 11 декабря 2010

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

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

...