2011-10-22 305 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); 

请记住,您将无法更改列表的内容。如果您需要这样做,请手动创建另一个列表。