Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自定义列表+;JSP+;java.lang.NumberFormatException_Java_Jsp - Fatal编程技术网

自定义列表+;JSP+;java.lang.NumberFormatException

自定义列表+;JSP+;java.lang.NumberFormatException,java,jsp,Java,Jsp,我想实现自定义JSP列表标记,但在访问自定义列表对象的属性时遇到问题。下面的示例访问test.jsp页面上List2的name属性,给出一个错误org.apache.jasper.jaspereException:java.lang.NumberFormatException:输入字符串:“name”。如何解决这个问题 public class List2 extends ArrayList<String> { public String getName() {

我想实现自定义JSP列表标记,但在访问自定义列表对象的属性时遇到问题。下面的示例访问
test.jsp
页面上
List2
name
属性,给出一个错误
org.apache.jasper.jaspereException:java.lang.NumberFormatException:输入字符串:“name”
。如何解决这个问题

public class List2 extends ArrayList<String> {

    public String getName() {
        return "name";
    }
}
整个
test.jsp
不工作

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
${list.name} 

我认为这是因为JSP EL允许使用
[]
访问对象属性。但是这两种方法对于
List
实例都有特殊的含义:它意味着访问第n个元素。因此,您可以编写
${list[2]}
${list.2}
。由于EL检测到您的对象是集合的实例,所以它尝试将名称转换为数字,您会得到此异常

请注意,这只是对您得到的异常的解释。我还没有检查规范,看它是Tomcat的bug还是预期的行为

您应该很少扩展
ArrayList
。大多数情况下,最好使用委托,从而将列表包装到另一个对象中。你就不能有下面这样的东西吗

public class List2 {

    private List list;

    public String getName() {
        return "name";
    }

    public List getList() {
        return list;
    }
}

创建额外类是多余的,请尝试使用以下方法:

<c:set var="listName"><jsp:getProperty name="list" property="name"/></c:set>
<c:out value="${listName}"/>


关于JSP的更多信息?表达式有效,由异常指示。但是JSP上的一些代码似乎试图将其解析为一个数字thsi@Jigar
${list.name}
产生错误JSP上下文中的
list
是什么?你是说整个test.JSP中的${list.name}不起作用吗?谢谢,我想我必须这样做。
@Controller
public class TestController {

    @ModelAttribute("list")
    public List2 testList() {
        List2 l = new List2();
        l.add("foo");
        l.add("bar");
        return l;
    }

    /* test.jsp */
    @RequestMapping("/test")
    public String test() {
        return "test";
    }
}
public class List2 {

    private List list;

    public String getName() {
        return "name";
    }

    public List getList() {
        return list;
    }
}
<c:set var="listName"><jsp:getProperty name="list" property="name"/></c:set>
<c:out value="${listName}"/>