2

我正在学习 Struts 2 并坚持将对象列表转换为字符串。

我有一个类电影,它有一个流派(List<Genre>)列表作为它的属性。我想将电影的流派名称显示为字符串(每个流派用逗号分隔)。我已成功将其他类转换为字符串,但它们都不是数组或集合。

我的第一次尝试是用方法编写一个自定义转换器类,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"(第二种情况)。

我在这里错过了什么?任何回应将不胜感激!

4

1 回答 1

1

你不需要转换器来标记这两个<s:iterator>标签。只需使用OGNL 投影

<s:property value="genres.{name}" />
于 2013-05-27T08:47:30.883 回答