Да, ожидается поведение IMO.
Параметры Http в принципе многозначны (обычно используются в многозначных списках выбора), поэтому перехватчик параметров struts2 запрашивает (отражением) сеттеры, которые принимают массивы или (в качестве второй опции) одно значение. Ваше действие, вероятно, имеет установщик setTests(TestConverterEnum[] a)
, поэтому, когда перехватчик Struts2 должен отобразить tests=
, он находит этот установщик и думает про себя: «Я должен установить это свойство« tests »с массивом, давайте посмотрим, как передано много параметров ... только один (пустой), тогда давайте создадим массив длины один и заполним его преобразованием ... " и т. д.
Я считаю разумным: ваш запрос содержал один параметр 'tests' (хотя и пустой), поэтому был создан одномерный массив.
Держу пари, что если вы попробуете TestConterter.action?tests=&tests=
, будет создан массив длины 2.
Обновлено :
Давайте посмотрим, согласны ли мы с этим: передавать пустой параметр в запросе (в принципе) не то же самое, что не передавать его ... хотя часто хочется рассматривать оба случая как эквивалентные .
Если вы хотите сказать Struts2: «полностью игнорировать пустые параметры» ... Я не думаю (предположим, что это приемлемая идея), это поведение может быть реализовано с помощью некоторой глобальной настройки ,
Вы всегда можете написать свой собственный перехватчик (или расширить Параметры перехватчик), чтобы он очищал пустые параметры из запроса перед их отображением.
Кстати, обратите внимание, что эта проблема не связана с Enums или Arrays, является полностью общей.
Теперь случай многозначных параметров требует дополнительного рассмотрения. Я предполагаю, что если у вашего Action есть открытое свойство типа array, то это потому, что его можно установить с несколькими параметрами (обычно это SELECT MULTIPLE) - если нет, то здесь есть некоторая проблема проектирования.
Каково ваше ожидаемое поведение для этого запроса?
TestConterter.action?tests=&tests=A&tests=&tests=B&tests=B
Должно ли это генерировать массив длиной 5 [null, A, null, B, B]
или 3 [A, B, B]
или 2 [A, B]
или как?
Трудно дать общие критерии; Вот почему это лучше всего рассматривается в вашем методе сеттера.