2015-01-28 14 views
5

Có cách nào để sử dụng thẻ tùy chỉnh JSP động không? Tôi có một biến đại diện cho tên của thẻ và tôi muốn gọi thẻ nhưng để tránh các câu lệnh chuyển đổi.Gọi thẻ JSP theo tên động

Ví dụ: Tôi có thẻ <my:foo attr="fooAttr" /> và thẻ <my:bar attr="barAttr" />, hơn tôi có <c:set var="tagName" value="foo" />. Tôi muốn bằng cách nào đó sử dụng biến tagName để gọi thẻ.

Trả lời

2

Tôi hiểu mối lo ngại của bạn ... Một số thứ như <tags:${ tagname }/>, phải không? Một giải pháp như vậy là hấp dẫn thực sự, nhưng nó sẽ liên quan đến việc sửa đổi đặc tả JSP để chấp nhận các thẻ được đặt tên động mà không phải là một phần của đặc tả XML.

Một "semidynamic" nhưng giải pháp đơn giản có thể bao gồm việc tạo thẻ đóng gói logic chuyển đổi. Nó có thể trông giống như:

<%@ tag body-content="empty" %> 
<%@ attribute name="tagname" required="true" %> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<%@ taglib tagdir="/WEB-INF/tags" prefix="tags" %> 

<c:choose> 
    <c:when test="${ tagname == 'tag1'}"> 
    <tags:tag1/> 
    </c:when> 
    <c:when test="${ tagname == 'tag2'}"> 
    <tags:tag2/> 
    </c:when> 
</c:choose> 

Sau đó, bạn có thể sử dụng (và tái sử dụng) nó bất cứ nơi nào bạn thích sử dụng giống như sau:

<tags:my-switch tagname="${ tagname }"/> 

Tất nhiên, bạn có thể thêm thuộc tính bất kỳ khác mà bạn có thể cần, và phần thân của thẻ không cần để trống. Thực tế, nếu bạn cần xử lý một số thẻ, hãy sửa đổi thuộc tính body-content ở trên và xử lý phần thân bằng cách sử dụng thẻ tiêu chuẩn <jsp:doBody/>.

Hy vọng điều này sẽ đáp ứng nhu cầu của bạn ...

Jeff

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