Struts 2 - 如何将对象列表转换为字符串?

时间:2013-05-26 17:55:55

标签: collections types struts2 converter

我正在学习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]" />,&nbsp;
     </s:iterator>
</td>

或者只是没有转换器:

<td>
     <s:iterator value="genres" status="genreStatus">
           <s:text name="genres[#genreStatus.index].name" />,&nbsp;
     </s:iterator>
</td>

它也没用。

在这两种情况下,Struts都没有跳转到任何if子句或报告任何错误(dev模式已启用)。它只是在浏览器上显示了Genre对象的内存地址(第一种情况)或"genres[#genreStatus.index].name"(第二种情况)。

我在这里想念什么?任何回复都将不胜感激!

1 个答案:

答案 0 :(得分:1)

对于<s:iterator>标记,您不需要转换器。只需使用OGNL projections

<s:property value="genres.{name}" />