Java - 将字符串转换为列表

3
这是将字符串转换为列表的正确方法吗?
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>

谢谢


request 的类型是什么? - Arnout Engelen
你想将一个字符串转换为列表,基于......什么,确切地说?你想要一个包含字符串中所有字符的列表吗?你想要根据特定分隔符拆分字符串吗?还是您只想将该字符串直接插入到列表中? - Giulio Piancastelli
或许 request.getParameter(..) 返回的是 Object,在这种情况下已知 styles 将会产生一个类型为 List 的对象…… 除非获取更多信息否则无法确定。 - Arnout Engelen
乍一看,它似乎是检索HTTP请求参数,通常这些方法确实返回String对象。 - Giulio Piancastelli
我已经编辑了我的问题,并附上了我正在处理的代码。这段代码来自于《Head First Servlets and JSPs》。 - DG3
4个回答

6
List<String> list = Arrays.asList(yourString);

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


5
通过您提供的额外servlet/JSP上下文,看起来您代码中真正的错误是在JSP页面中使用了request.getParameter方法:该方法确实返回一个字符串,而您不能将字符串转换为列表,无论是强制转换还是其他语言或数据结构允许的任何操作都不行。您可以使用已经建议过的方法之一将字符串插入到列表中,或者使用其他方法将列表转换为字符串,但从代码来看,这并不是您需要的。
在servlet代码中,您将styles属性设置为包含啤酒品牌的列表。因此,要获取该列表,您需要调用request.getAttribute方法而不是getParameter方法。getAttribute方法返回一个对象,它实际上是一个列表,并且您知道它是这样的,因为您已经将其设置为这样,所以在这种情况下,强制转换正是需要的操作,以获取具有其原始类型的值。在代码中,这意味着:
List styles = (List) request.getAttribute("styles");

在您的JSP中,替换掉导致问题的那一行即可。

谢谢回复。当我使用getAttribute时,结果显示为true的值并进入无限循环。 - DG3
哎呀,是的,代码里还有一个错误。Iterator.hasNext 检查列表中是否有另一个元素可以遍历,但是要在 print 调用中获取该元素,您需要调用 Iterator.next。抱歉我第一眼没看到它。 - Giulio Piancastelli
@Guilio。感谢您的回答。您解释得非常清楚。现在它可以工作了。 - DG3

1

这不是你正在做的事情,你试图将一个 String 转换为一个 List,这并不相同。一个转换并不会转换对象,它只是试图告诉对象的类型

你需要做的是:

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"))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接