2009-10-08 70 views
13

Tôi muốn chuyển đối tượng Kiểu danh sách nằm trong JPS chính đến một JSP bao gồm (jsp: include). Vì parm chỉ hỗ trợ chuỗi, tôi không thể sử dụng thẻ parm để chuyển dữ liệu loại danh sách vào tệp bao gồm.Chuyển danh sách sang tệp jsp khác

Sử dụng ví dụ:

<jsp:include page="/jsp/appList.jsp"> 
    <jsp:param name="applications" value="${applications}"/> 
</jsp:include> 

Hoặc:

<jsp:include page="/jsp/appList.jsp"> 
    <jsp:param name="applications" value="${confirmed_applications}"/> 
</jsp:include> 
<jsp:include page="/jsp/appList.jsp"> 
    <jsp:param name="applications" value="${unconfirmed_applications}"/> 
</jsp:include> 
<jsp:include page="/jsp/appList.jsp"> 
    <jsp:param name="applications" value="${canceled_applications}"/> 
</jsp:include> 

tôi có thể tạo ra một Simple Tag Handler nhưng tôi muốn biết nếu có một cách dễ dàng hơn.

Trả lời

7

Đây thực sự là ý nghĩa của các thẻ jsp. Bạn tạo tệp .tag chấp nhận thuộc tính (không phải thông số), có thể thuộc loại tùy ý.

Xem this article để có hướng dẫn tốt.

"Params" tương tự với các thông số bạn thấy trong truy vấn HTTP (phần URL sau '?').

+0

Tôi không biết ai có thể tạo thẻ taglib trong JSP thuần túy. Người đàn ông tuyệt vời! Cảm ơn! –

+0

Có, công trình này rất tuyệt. Lưu ý nhỏ: Phần quan trọng là thiết lập ** loại ** của thuộc tính là Object nếu không nó sẽ được coi là String. '<% @ attribute name =" answers "required =" true "type =" java.lang.Object "%>' –

3

Bạn lấy danh sách đó trong JSP chính của mình như thế nào?

Nếu bạn nhận được nó từ mô hình (trực tiếp/gián tiếp yêu cầu/phiên thuộc tính), bạn có thể vượt qua tên của thuộc tính để bao gồm JSP của bạn và tái lấy nó từ mô hình đó:

<jsp:include page="/jsp/appList.jsp"> 
    <jsp:param name="applications" value="confirmedApplications"/> 
</jsp:include> 

Nếu bạn đang tạo hoặc sửa đổi danh sách đó trong chính JSP bạn thực sự có vấn đề lớn hơn thì :-) nhưng bạn có thể liên kết danh sách của bạn để yêu cầu theo một số tên thuộc tính và sau đó sử dụng phương pháp trên.

0

Hoặc bạn có thể sử dụng các đối tượng yêu cầu hoặc phiên để truyền các đối tượng.

Lợi thế

Yêu cầu - Yêu cầu sử dụng vì tuổi thọ của nó thấp hơn so với đối tượng phiên.

Session - Bạn có thể lấy cùng một đối tượng đôi khi sau này trong một trang khác hoặc hành động

2

Giả sử bạn đưa danh sách trong phạm vi yêu cầu và sử dụng applications như tên của tham số của bạn, bạn có thể tham khảo danh sách những thứ tương tự ${requestScope[param.applications]} này

10

Đồng ý với ChssPly76 rằng đó có thể là dấu hiệu của sự cố nếu Danh sách được tạo trong JSP, nhưng một cách tiếp cận khác để đưa đối tượng đến JSP khác là thêm nó vào trường thuộc tính đối tượng HttpServletRequest bằng cách sử dụng một tập lệnh:

JSP với t ông liệt kê:

<% 
request.setAttribute("theList", ListObject); 
%> 

Các JSP khác:

<% 
List myList = (List) request.getAttribute("theList"); 
%> 
2

Bạn có thể vượt qua các đối tượng Danh sách thông qua requestScope:

<c:set var="listApplications" value="${applications}" scope="request"/> 
<jsp:include page="/jsp/appList.jsp" /> 

Và trong appList.jsp bạn có thể truy xuất danh sách bằng cách sử dụng

${requestScope.listApplications} 
0

Giả sử bạn có parent.jsp và child.jsp.

Bạn muốn:

1) Bao gồm child.jsp từ parent.jsp, 2) Gửi một số thông số từ parent.jsp đến child.jsp.

làm các bước sau:

1) Trong parent.jsp '

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 

<c:set var="items" value="${itemsFromDB}" scope="request"/> 
<jsp:include page="child.jsp"/> 

' 2) Trong child.jsp

<div> 
alert("${requestScope.items}"); 
</div> 

Thats tất cả.

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