2011-10-22 73 views
3

這是將字符串轉換爲列表的正確方法嗎?Java - 將字符串轉換爲列表

List styles = (List)request.getParameter("styles"); 

    Model (BeerExpert.java) 

package com.example.model; 
import java.util.*; 

public class BeerExpert { 
    public List getBrands(String color){ 
     List brands = new ArrayList(); 
     if(color.equals("amber")){ 
      brands.add("Jack Amber"); 
      brands.add("Red Moose"); 
     } 
     else{ 
      brands.add("Jail Pale Ale"); 
      brands.add("Gout Scott"); 
     } 
     return brands; 
    } 
} 

下一個是servlet類

BeerSelect.java 

package com.example.web; 

import com.example.model.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import java.io.*; 
import java.util.*; 

public class BeerSelect extends HttpServlet { 
    public void doPost(HttpServletRequest request, 
         HttpServletResponse response) 
         throws IOException,ServletException{ 
     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 

     out.println("Beer Selection Advice <br>"); 
     String c = request.getParameter("color"); 

     BeerExpert be = new BeerExpert(); 
     List result = be.getBrands(c); 

     request.setAttribute("styles", result); 
     RequestDispatcher view = request.getRequestDispatcher("results.jsp"); 
     view.forward(request, response); 
    } 
} 

最後的JSP。

results.jsp 

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd"> 
<%@page import="java.util.*" %> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>JSP Page</title> 
    </head> 
    <body> 
     <h1 align="center">Beer Recommendations in JSP!!!</h1> 
     <% 
      List styles = (List)request.getParameter("styles"); 
      Iterator it = styles.iterator(); 
      while(it.hasNext()){ 
       out.print("<br> try " + it.hasNext()); 
      } 
     %> 
    </body> 
</html> 

感謝

+0

「請求」的類型是什麼? –

+0

你想要將一個字符串轉換爲基於...什麼,到底是什麼?你想要一個字符串中所有字符的列表嗎?你想分割特定分隔符上的字符串嗎?或者你只是想將字符串插入列表中? –

+0

或者'request.getParameter(..)'返回'Object',在這種情況下,已知'styles'將產生一個List類型的對象......沒有更多的信息就無法分辨出來。 –

回答

5

根據您提供的額外的servlet/JSP背景下,似乎真正錯在你的代碼是在JSP頁面中使用的request.getParameter:該方法確實返回String,你不能轉換一個StringList,而不是轉換,甚至沒有任何其他語言或數據結構允許的操作。您可以插入一個StringList,使用已經提出的方法中的一種(或變換一個List到使用其他方法String),但從這不是你所需要的編碼判斷。

在servlet代碼,您將styles屬性List含有啤酒品牌。因此,要獲得List,您需要調用request.getAttribute而不是getParametergetAttribute方法返回一個Object,這實際上是一個List,並且您知道因爲您已將它設置爲這樣,所以在這種情況下,強制轉換恰好是以原始類型返回值所需的操作。在代碼中,這意味着在您的JSP中,代替爲您帶來麻煩的行,您的代碼爲

List styles = (List) request.getAttribute("styles"); 

+0

感謝您的答覆。當我使用getAttribute時,結果顯示true的值並進入無限循環 – DG3

+0

哎呀,是的,代碼中有另一個錯誤。 'Iterator.hasNext'檢查是否有另一個元素在列表中導航,但實際上在'print'調用中獲得該元素需要調用'Iterator.next'。對不起,我一眼就看不到它。 –

+0

@Guilio。感謝你的回答。你已經解釋得很好。它現在有效 – DG3

1

這不,你在做什麼是試圖一個StringList,這是不一樣的。 A cast不轉換對象,它只是試圖告訴什麼類型一個對象是。

你需要做的是:

List<String> list = new LinkedList<String>(); 
list.add(request.getParameter("styles")); 
0

如果你想找回更多的「風格」,你可以使用:

request.getParameterValues("styles") 

,將返回字符串數組,這可能是用於創建列表如下:

List<String> styles = java.util.Arrays.asList(request.getParameterValues("styles")) 
6
List<String> list = Arrays.asList(yourString); 

請記住,您將無法更改列表的內容。如果您需要這樣做,請手動創建另一個列表。