我正在学习Struts 2并坚持将对象列表转换为字符串。
我有一个类电影,它有一个类型列表(List<Genre>
)作为其属性。我希望将电影的类型名称显示为字符串(每个类型用逗号分隔)。我已成功将其他类转换为String,但它们都不是数组或集合。
我的第一次尝试是使用方法convertToString(Map map, Object obj)
编写自定义转换器类,但它不起作用:
if (obj instanceof List) {
System.out.println("Found a list!");
StringBuilder results = null;
List list = (List) obj;
if (list != null && list.size() > 0) {
results = new StringBuilder();
// Genre List
if (list.get(0) instanceof Genre) {
System.out.println("Found a genre list!");
for (Object genre : list) {
results.append(((Genre) genre).getName() + ", ");
}
}
}
在JSP页面上:
<s:iterator value="movieList" status="movieStatus">
...
<td>
<s:property value="genres" />
</td>
...
</s:iterator>
然后我尝试了另一种方式:
if (obj instanceof Genre) {
System.out.println("Found a genre!");
return ((Genre) obj).getName();
}
JSP:
<td>
<s:iterator value="genres" status="genreStatus">
<s:text name="genres[#genreStatus.index]" />,
</s:iterator>
</td>
或者只是没有转换器:
<td>
<s:iterator value="genres" status="genreStatus">
<s:text name="genres[#genreStatus.index].name" />,
</s:iterator>
</td>
它也没用。
在这两种情况下,Struts都没有跳转到任何if
子句或报告任何错误(dev
模式已启用)。它只是在浏览器上显示了Genre对象的内存地址(第一种情况)或"genres[#genreStatus.index].name"
(第二种情况)。
我在这里想念什么?任何回复都将不胜感激!
答案 0 :(得分:1)
对于<s:iterator>
标记,您不需要转换器。只需使用OGNL projections。
<s:property value="genres.{name}" />