我想实现自定义 JSP 列表标记,但在访问自定义列表对象的属性时遇到问题。通过如下示例访问name
的财产List2
on test.jsp
页面报错org.apache.jasper.JasperException: java.lang.NumberFormatException: For input string: "name"
。如何解决这个问题?
public class List2 extends ArrayList<String> {
public String getName() {
return "name";
}
}
test.jsp
<%-- java.lang.NumberFormatException --%>
${list.name}
<%-- this works ok --%>
<c:forEach items="${list}" var="item">
${item}
</c:forEach>
EDIT
Whole 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" %>
<c:forEach items="${list}" var="item">
${item}
</c:forEach>
Whole test.jsp
NOT working
<%@ 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}
测试控制器.java:
@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";
}
}
我认为这是因为 JSP EL 允许使用.
or []
访问对象属性。但两者都有特殊的意义List
实例:表示访问第n个元素。你可以这样写${list[2]}
or ${list.2}
。由于 EL 检测到您的对象是集合的实例,因此它尝试将名称转换为数字,并且您会收到此异常。
请注意,这只是对您收到的异常的解释。我还没有检查规范来看看这是否是 Tomcat 的错误或者是否是预期的行为。
你应该很少扩展ArrayList
。大多数时候,最好使用委托,从而将列表包装在另一个对象内。难道你就不能有像下面这样的东西吗?
public class List2 {
private List list;
public String getName() {
return "name";
}
public List getList() {
return list;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)