2010-10-26 63 views
3

如何在Struts 2中使用s:a href和param标签传递一个整数列表?Struts 2列表参数传递

例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> 

当我点击 “测试链接” 的形式提交了myList中的以下内容:

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

这导致Struts重新定向到“输入”页面。这不是理想的行为。有没有人有任何关于如何使用Struts标签正确传递整数列表的建议?

+0

你想要的url结果是什么? – leonbloy 2010-10-27 15:05:29

+0

Struts 2 getter方法可以处理的任何东西。收件人类有一个方法public void setMyList(List myList),它与问题中描述的setter相同。 Struts不会设置列表,而是将我重定向到“输入”页面。 – David 2010-10-27 19:44:05

回答

0

如果我没有记错,param标签会调用列表上的toString以将参数放入URL中。因此,应该得到列表的动作只会得到一个字符串。

下一步操作的setter需要接受一个字符串,在这个setter中你可以拆分字符串,提取数字并用它填充一个新列表。

+0

是的,这是一个合理的解决方法,我过去使用过字符串解析来处理这种情况。我希望有人能够本地处理列表。例如,Struts 2自动处理日期和整数类型。我不需要有一个字符串,并将其转换为一个整数。我可以声明一个整数,Struts 2处理String到整数的转换。 – David 2010-11-09 14:04:53

+0

是的,param拦截器处理这个“魔法”。但它只处理简单的数据结构。有了一个列表,它不知道你在那里放了什么,可能会调用toString,然后在另一边将它视为一个字符串列表。我想你可以扩展params拦截器,如果你想要的功能,然后使用扩展参数拦截器,而不是从默认的堆栈默认的。 – Akku 2010-11-10 09:21:42

+1

您寻找的另一个解决方案可能是在SessionAware拦截器的帮助下将该列表存储在用户的会话中 - 但是从您的问题我不知道传递这些参数背后的真正想法是什么。希望帮助:-) – Akku 2010-11-10 09:24:14