2011-08-16 29 views
6

Trong đồng bằng JSP Tôi có thể lấy mục đầu tiên bởi EL ${form.items[0]}, nhưng trong một thẻ JSP cùng một biểu thức ném ngoại lệ sau đây:Làm thế nào để có được một mục từ String [] thuộc tính trong JSTL/JSP tag

javax.el.PropertyNotFoundException: không thể tìm thấy bất động sản 0 trong lớp java.lang.String

giá trị của ${form.items}[Ljava.lang.String;@315e5b60.

JSP tag code is:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ attribute name="items" required="true" %> 
${items[0]} 

JSP code is:

<%@ taglib prefix="t" tagdir="/WEB-INF/tags"%> 
<t:input items="${form.items}"></t:input> 

Có lẽ tôi quên loại thuộc tính hay cái gì khác? Tại sao cách truy cập các giá trị khác nhau trong thẻ JSP và JSP?

Trả lời

13

Bạn cần chỉ định loại thuộc tính của thuộc tính thẻ tùy chỉnh. Theo mặc định, nó là java.lang.String và vùng chứa JSP buộc thuộc tính vào chuỗi trước khi chuyển nó vào thẻ của bạn. Nó do đó gọi toString trên mảng String của bạn.

<%@ attribute name="items" required="true" type="java.lang.String[]" %> 

hoặc

<%@ attribute name="items" required="true" type="[Ljava.lang.String" %> 

nên làm các trick. Nếu không, hãy sử dụng

<%@ attribute name="items" required="true" type="java.lang.Object" %> 

nên, nhưng ít rõ ràng hơn.

+0

Cảm ơn, giải pháp đầu tiên hoạt động (type = "java.lang.String []"). Thứ hai - không hoạt động, tôi đã thử nó trước đây. –

+0

Sử dụng java.lang.Object cho phép thẻ nhận cả hai mảng và java.util.List. Điều đó có thể hữu ích trong một số trường hợp. – marcus

Các vấn đề liên quan