Struts2/теги, выводящие значения параметров даты, которые не работают при преобразовании типов - PullRequest
4 голосов
/ 24 марта 2012

Я борюсь с проблемой форматирования даты в Struts2. Если я правильно понимаю, преобразование типов в Struts2 зависит от локали, и любые поля / параметры формы, которые сопоставляются с объектами Date, должны быть строками, отформатированными в формате SHORT, соответствующем локали; выходные данные по умолчанию для объекта Date в стеке значений также выводятся в виде специфичного для Locale формата SHORT (если он не переопределен пользовательским форматированием).

Хотя поля формы отлично работали с датами, при использовании тега <s:url> я не могу получить тег <s:param> для правильного кодирования параметров даты. Когда я пытаюсь что-то вроде этого

<s:url action="foo" >
  <s:param name="endDateParam" value="#endDate"/>
</s:url>

результат довольно явно не КОРОТКИЙ формат:

/foo.action?endDateParam=Sat+Jan+14+00%3A00%3A00+EST+2012

Я перечитал документацию по Struts2, но в основном они обсуждают создание пользовательских форматов даты в файлах свойств i18n'ized, что не кажется правильным решением.

Любая помощь с этой проблемой будет принята с благодарностью.

Ответы [ 2 ]

3 голосов
/ 02 мая 2013

Вы можете отправить это так:

<s:param name="dateFrom">
<s:date name="dateFrom" format="dd.MM.yyyy"/>
</s:param>
0 голосов
/ 06 мая 2012

Возможно, вы уже решили эту проблему, отформатировав строку в действии так, как вам это нужно. Это я бы посоветовал в первую очередь, если только вы не сторонник разделения модели / вида или не существует однозначного сопоставления между действием и видом, и в этом случае это усердие может быть оправдано.

Допустим, вы почувствовали, что форматирование не является делом действия, в этом случае вы можете использовать OGNL для его полного эффекта:

Вот пример, который отображает текущую дату (он использует new для создания новой даты, но вы можете очень легко просто заменить «new java.util.Date ()» на «endDate». был сконструирован таким образом, чтобы любой мог просто вставить его в свой JSP без каких-либо зависимостей действий.

<p>
   <s:property value="@java.text.DateFormat@getDateInstance(@java.text.DateFormat@SHORT, @java.util.Locale@CANADA).format(new java.util.Date())"/>
</p>

ПРИМЕЧАНИЕ : для доступа к статическому методу OGNL требуется значение true. Самый простой способ сделать это - добавить в struts.xml следующее:

<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>

Использование OGNL для этого уровня немного подозрительно, но его легко прочитать, и намерение явно связано с представлением / представлением. Хотя это не так просто построить ... Самый простой способ - написать все одной строкой java, а затем применить правила синтаксиса ognl, которые вы найдете здесь:

http://commons.apache.org/ognl/language-guide.html

Также для справки:

http://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html

http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html

...