2008-09-16 53 views
23

Tôi có một trang JSP chứa một tập lệnh mà tôi khởi tạo một đối tượng. Tôi muốn chuyển đối tượng đó vào thẻ JSP mà không sử dụng bất kỳ bộ nhớ cache nào.Làm cách nào để chuyển đối tượng vào thẻ JSP?

Ví dụ tôi muốn thực hiện điều này:

<%@ taglib prefix="wf" uri="JspCustomTag" %> 

<% 
Object myObject = new Object(); 
%> 

<wf:my-tag obj=myObject /> 

Tôi đang cố gắng để tránh trực tiếp tương tác với bất kỳ bộ nhớ đệm (trang, phiên ServletContext), tôi thà có thẻ của tôi xử lý đó.

+0

Lưu ý, tôi không muốn đối tượng chuyển đổi thành chuỗi và được chuyển thành chuỗi, tôi muốn trình xử lý thẻ của tôi thực sự có quyền truy cập đối tượng. –

+5

Bạn có quan tâm để chọn câu trả lời đúng không? –

+0

@RubensMariuzzo Tất cả đều xấu. – peterh

Trả lời

0

Sử dụng ngôn ngữ biểu hiện:

 
    <wf:my-tag obj="${myObject}" /> 
+0

Chúng ta cần thêm rằng trong một số ngữ cảnh, trước khi sử dụng nó. –

+0

Nó đầu tiên serializes myObject và sau đó deserializes. Giải pháp rất xấu. – peterh

4

Cú pháp ban đầu là để tái sử dụng '<% =%>'

Vì vậy

<wf:my-tag obj="<%= myObject %>" /> 

Xem this part of the Sun Tag Library Tutorial cho một ví dụ

+0

Tôi nhớ điều đó và con người thật xấu xí! +1 –

+0

Liên kết bị hỏng. Xem phiên bản Lưu trữ web [tại đây] (http://web.archive.org/web/20090130012629/http://java.sun.com/products/jsp/tutorial/TagLibraries16.html). – Behrang

+0

Nó đầu tiên serializes myObject và sau đó deserializes. Giải pháp rất xấu. – peterh

2

Đối ngôn ngữ biểu thức của tôi chỉ hoạt động nếu tôi làm cho biến đó có thể truy cập được, bằng cách đặt ting nó ví dụ trong bối cảnh trang.

<% Object myObject = new Object(); 
    pageContext.setAttribute("myObject", myObject); 
%> 
<wf:my-tag obj="${myObject}" /> 

Nếu không thì sẽ nhận được giá trị rỗng.

<wf:my-tag obj="<%= myObject %>" /> không hoạt động thêm. Ngoài ra <% =%> cho phép xác thực kiểu thời gian biên dịch jsp, trong khi El chỉ được xác thực trong thời gian chạy.

+0

Sử dụng biên dịch JSP, bạn sẽ nhận được lỗi trên thời gian biên dịch. –

+0

Nó đầu tiên serializes myObject và sau đó deserializes. Giải pháp rất xấu. – peterh

10
<jsp:useBean id="myObject" class="java.lang.Object" scope="page" /> 
<wf:my-tag obj="${myObject}" /> 

Không khuyến khích sử dụng Tập lệnh trong trang JSP. Nó giết chết mục đích của một ngôn ngữ mẫu.

+0

Đầu tiên, phạm vi phân trang là một điều rất xấu. Thứ hai: nó đầu tiên serializes myObject và sau đó deserializes. Giải pháp này là tồi tệ hơn nhiều như một tập lệnh đơn giản. – peterh

+2

1. Điều gì là sai với đậu rang 'trang'? 2. Không có serialization diễn ra ở đây. Tại sao bạn nghĩ rằng? –

+0

Cuối cùng tôi hiểu bạn có quyền, vì vậy bạn có tiền thưởng. – peterh

36

Câu hỏi hơi khác một chút mà tôi đã tìm kiếm ở đây: "Làm cách nào để chuyển đối tượng vào tệp thẻ?"

trả lời: Sử dụng "loại" thuộc tính của các chỉ thị thuộc tính:

<%@ attribute name="field" 
       required="true" 
       type="com.mycompany.MyClass" %> 

Loại defaults to java.lang.String, vì vậy mà không có nó bạn sẽ nhận được một lỗi nếu bạn cố gắng truy cập vào các lĩnh vực đối tượng nói rằng nó không thể tìm trường từ loại Chuỗi.

+1

Đây không phải là câu hỏi, -1. – peterh

1

Bạn có thể sử dụng "<% =%>" để có được những giá trị đối tượng trực tiếp trong thẻ của bạn:

<wf:my-tag obj="<%= myObject %>"/> 

và để có được giá trị của bất kỳ biến trong đó đối tượng bạn có thể nhận được rằng việc sử dụng "obj. tham số "như:

<wf:my-tag obj="<%= myObject.variableName %>"/> 
Các vấn đề liên quan