2010-03-29 37 views
12

Có lý do chính đáng nào để không cho phép biểu thức tập lệnh hoặc EL được chèn dưới dạng giá trị thuộc tính không?Có lý do nào tốt để sử dụng <rtexprvalue> false</ rtexprvalue> trong các thẻ JSP không?

Hãy nói rằng chúng tôi có tag:

<tag> 
    <name>mytag</name> 
    <tag-class>org.apache.beehive.netui.tags.tree.Tree</tag-class> 
    <attribute> 
     <name>attr</name> 
     <required>false</required> 
     <rtexprvalue>false</rtexprvalue> 
     <type>boolean</type> 
    </attribute> 
</tag> 

gì có thể là một lý do chính đáng cho dissallowing dưới đây?

<my:mytag attr="${setting}" /> 

Trả lời

14

Tôi muốn nói rằng đây chỉ là một biện pháp tương thích ngược, giống như khả năng tắt EL hoàn toàn cho một JSP nhất định.

Có thể thư viện thẻ tồn tại trước EL và sử dụng cú pháp đặc biệt $ {} cho mục đích riêng của nó. Có thể giá trị thuộc tính thường lấy các giá trị bao gồm một chữ $ {}.

Nếu không có cài đặt như vậy, mã hiện tại (trong thư viện thẻ hoặc JSP) sẽ cần được sửa đổi để vẫn hoạt động sau khi nâng cấp lên phiên bản mới nhất của thông số Servlet.

+0

Câu trả lời hoàn hảo :). Cảm ơn –

3

Có thể có khả năng là thuộc tính (ví dụ: id để tham chiếu đến chính thẻ) mà không phù hợp để đặt ở thời gian chạy. Bạn có thể có thể đưa ra một kịch bản mà bạn thực sự muốn ${} có nghĩa là văn bản thuần hoặc bất kỳ nội dung EL nào được đánh giá thủ công trong một số loại ngữ cảnh tùy chỉnh.

Nhưng tôi nghĩ lý do thực sự của chuyển đổi là khả năng tương thích ngược. Thẻ tùy chỉnh có sẵn hỗ trợ sẵn có của JSP cho EL; thay đổi định nghĩa bên dưới thẻ taglib để ${} hiện có ý nghĩa đặc biệt có khả năng phá vỡ việc sử dụng thẻ hiện tại đó. An toàn hơn để mặc định rtexprvalue-false cho back-compat và cho phép các thẻ taglib mới cho JSP 2.0 xác định chúng muốn có hành vi mới.

[có. những gì Thilo nói. :-)]

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