2011-08-16 83 views
3

我想實現自定義JSP列表標記,但在訪問自定義列表對象的屬性時遇到問題。像下面的示例訪問name財產List2test.jsp頁面給出錯誤org.apache.jasper.JasperException: java.lang.NumberFormatException: For input string: "name"。如何解決這個問題?自定義列表+ JSP + java.lang.NumberFormatException

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> 

編輯

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> 

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} 

TestController.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"; 
    } 
} 
+0

更多的JSP的信息?表達的作品,這是由例外表示。但是,您的JSP上的一些代碼似乎試圖將其解析爲數字。 – Thomas

+0

你可以發佈產生的代碼嗎 –

+0

這是整個test.jsp嗎? – Bozho

回答

5

我認爲這是由於該JSP EL允許使用.[]訪問對象的屬性。但是它們對於List實例都有特殊含義:它意味着訪問第n個元素。因此你可以寫${list[2]}${list.2}。由於EL檢測到你的對象是一個集合的實例,它會嘗試將名稱轉換爲數字,並且你會得到這個異常。

請注意,這只是對您所得例外的解釋。我沒有檢查過規範,看它是否是Tomcat的錯誤,或者它是否是預期的行爲。你應該很少延伸ArrayList。大多數情況下,最好使用委託,並將列表包裝在另一個對象中。難道你不能擁有像下面這樣的東西嗎?

public class List2 { 

    private List list; 

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

    public List getList() { 
     return list; 
    } 
} 
+0

謝謝,我想我必須這樣做。 – marioosh

0

創建一個額外的類是多餘的,請嘗試使用以下:

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