2010-10-26 2 views
3

Как передать список целых чисел, используя теги s: a href и param в Struts 2?Struts 2 List Parameter Passing

Пример POJO:

private List<Integer> myList = new ArrayList<Integer>(); 

public List<Integer> getMyList() { 
    return myList; 
} 

public void setMyList(List<Integer> myList) { 
    this.myList = myList; 
} 

Пример JSP Страница:

<s:url id="testUrl" action="testAction"> 
    <s:param name="myList" value="%{myList}" /> 
</s:url> 
<s:a href="%{testUrl}">Test Link</s:a> 

Когда я нажимаю на "Test Link", форма представляет следующую за MyList:

[1, + 2, + 3, + 4, + 5]

Это приводит к тому, что Struts перенаправляются на страницу ввода. Это не желаемое поведение. Кто-нибудь есть предложения о том, как правильно передать список целых чисел с помощью тегов Struts?

+0

Каков ваш желаемый результат? – leonbloy

+0

Все, что может обработать метод геттера Struts 2. Класс получателя имеет метод public void setMyList (List myList), который идентичен задатчику, описанному в вопросе. Вместо того, чтобы устанавливать список, Struts перенаправляет меня на страницу «ввода». – David

ответ

0

Параметр tag вызывает toString в списке, чтобы поместить параметр в URL-адрес, если я правильно помню. Поэтому действие, которое должно получить список, получает строку.

Установитель в следующем действии должен принять строку, и в этом сеттере вы можете разделить строку, извлечь числа и заполнить новый список этим.

+0

Да, это разумное обходное решение, и я использовал синтаксический анализ в прошлом для обработки этого случая. Я надеялся, что у кого-то будет возможность обрабатывать списки. Например, Struts 2 автоматически обрабатывает типы даты и целого. Мне не нужно иметь String и вставить его в целое число. Я могу просто объявить целое число, а Struts 2 обрабатывает преобразование String в integer. – David

+0

Да, пара-перехватчик обрабатывает эту «магию». Но это только обработка простых структур данных. Со списком он не мог знать, что вы там вложили, скорее всего, вызовет toString на нем, а с другой стороны будет рассматривать его как список строк. Я предполагаю, что вы могли бы расширить перехватчик params, если хотите эту функциональность, а затем использовать этот расширенный перехватчик params вместо стандартного по умолчанию из стека по умолчанию. – Akku

+1

Другим решением, которое вы ищете, может быть сохранение списка в сеансе пользователя с помощью SessionAware-перехватчика, но из вашего вопроса я не знаю, какова реальная идея передачи этих параметров. Надеюсь, что помогло :-) – Akku