2014-03-29 29 views
0
<% 
    ArrayList aList=(ArrayList)request.getAttribute("read"); 
    String[] write =aList.toArray(new String[aList.size()]); 
%> 

在上述代碼轉換爲字符串[],我得到對象[]不能不能在JSP

不兼容的類型:對象[]不能被轉換爲String []。

,如果我只投了我會得到的答案是什麼我想,我google並得到了很多的解決方案,但沒有給我一個解決方案,幫我找出這個問題的。提前感謝您的回覆。

+0

爲什麼要這樣做?你想用'String []'做什麼,你不能用list?爲什麼你還在使用腳本而不是JSTL? –

+0

@RohitJain先生,我想打印在jsp頁面先生ArrayList的價值,我很新鮮,這是我的任務先生,他們要求我做不使用JSTL標籤先生 – Selva

+0

這是奇怪的是,有人問你使用scriplets而不是JSTL 。順便說一句,如果你只是想顯示值,那麼你不需要將其轉換爲'String []'。 –

回答

5

問題是aList的類型是raw typeArrayList。這意味着所有仿製藥的痕跡都會從中刪除 - 即使使用通用方法toList

是很簡單的,雖然解決 - 只需使用ArrayList<?>代替:

ArrayList<?> aList = (ArrayList<?>)request.getAttribute("read"); 

原始類型是在一般的頸部疼痛,並真的只爲了向後兼容 - 儘量避免在可能的地方。

+0

如果我使用像上面的解決方案,我得到運行時錯誤「java.lang.ArrayStoreException在java.util.ArrayList.toArray(ArrayList.java:393)」 – Selva

+1

@Selva:嗯,這將表明你的列表中包含一個非字符串。你實際上*期待它包含什麼? –

+0

爵士是的,先生也包含非字符串值也先生,但我想打印JSP page.i所有ArrayList的價值正在尋找過去4小時先生,幫我先生 – Selva

1

首先,由於您只是想在您的ArrayList中顯示該值,因此您並不需要將其轉換爲數組。你也可以迭代ArrayList

其次,即使您將其轉換爲數組,並且該列表包含非字符串值,那麼爲什麼您認爲可以將其存儲在String[]?您可以在String[]中儲存Integer參考嗎?不。這就是爲什麼它投擲ArrayStoreException。您應該只使用Object[]。但正如我所說,你不需要它。只需遍歷列表即可。和其他答案一樣,不要使用原始類型。

<% 
    ArrayList<?> list = (ArrayList<?>) request.getAttribute("read"); 

    for (Object value: list) { 
     out.println(value); 
    } 
%> 

但是,那是錯誤的代碼。您不應該再使用JSP中的腳本。我不知道是誰建議你使用它而不是JSTL。使用JSTL,您可以使用<c:forEach>標記來迭代並打印這些值:

<c:forEach items = "${read}" var = "value"> 
    <c:out value="${value}" /> 
</c:forEach>