2013-05-26 67 views
2

我正在學習Struts 2並將對象列表轉換爲字符串。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模式處於打開狀態)。它僅在瀏覽器上顯示了流派對象的內存地址(第一種情況)或"genres[#genreStatus.index].name"(第二種情況)。

我在這裏錯過了什麼?任何迴應將不勝感激!

+0

顯示整個轉換器以及爲什麼需要它......如果它是一筆交易,那麼您在JSP上做了什麼錯了?如果你試圖在所有地方做到這一點,你有沒有考慮過ajax/json? – Quaternion

回答

1

對於那兩個<s:iterator>標籤,您都不需要轉換器。只需使用OGNL projections即可。

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

它的工作原理!非常感謝你! :) –