2010-02-24 20 views
5

Özel taglib'im olduğunu varsayalım:JSP Özel Taglib: İç içe değerlendirme

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

<mytaglib:doSomething> 
    Test 
</mytaglib:doSomething> 

taglib sınıfının içinde bir şablonu işlemek ve JSP'ye çıkışını yeniden değerlendirmesini söylemem gerekiyor, örneğin eğer şunu varsa:

public class MyTaglib extends SimpleTagSupport { 

    @Override public void doTag() throws JspException, IOException { 
    getJspContext().getOut().println("<c:out value=\"My enclosed tag\"/>"); 
    getJspBody().invoke(null); 
    } 
} 

Sahip olduğum çıktı:

<c:out value="My enclosed tag"/> 
Test 

Bunu gerçekten çıkarmam gerekirse:

My enclosed tag 
Test 

Bu uygun mu? Nasıl?

Teşekkürler.

+0

Tamam, kendim hiçbir nihai cevabı olan bir süre için bu soruyu bırakarak ve sorunu araştırdıktan sonra, sonuç o * mümkün * olmaması. Şerefe. –

cevap

2

Tiago, tam sorununuzu nasıl çözebilirim bilmiyorum ama JSP kodunu bir dosyadan yorumlayabilirsiniz. Sadece bir RequestDispatcher oluşturmak ve şunları JSP: Bir Liferay portletteki bu kodu test

public int doStartTag() throws JspException { 
    ServletRequest request = pageContext.getRequest(); 
    ServletResponse response = pageContext.getResponse(); 

    RequestDispatcher disp = request.getRequestDispatcher("/test.jsp"); 
    try { 
     disp.include(request, response); 
    } catch (ServletException e) { 
     throw new JspException(e); 
    } catch (IOException e) { 
     throw new JspException(e); 
    } 
    return super.doStartTag(); 
} 

, ama yine de başka bağlamlarda çalışması gerektiğine inanıyoruz. o yapmazsan, ben bilmek istiyorum :)

HTH

+0

Bunu gerçekten test etmedim çünkü bir noktada gereksinimler değişti ve artık bu problemi çözmem gerekiyordu, bu yüzden çözümünüzü kabul ediyorum çünkü en iyi cevaptı ve kendiniz test ettiniz. Teşekkürler :) –

1

ne gerçekten olması gerekir şudur

<bodycontent>JSP</bodycontent> 
+0

Taglib'i doğrudan JSP'ye yerleştirmek bir seçenek değildir, çünkü örneğin bir üçüncü parti kitaplığından dinamik olarak oluşturulmuş olacağım. –

0

Neden doTag yönteminizin içinde bir JSTL etiketi yazarsınız? println doğrudan derlenmiş JSP'ye (read: servlet) giriyor Tarayıcıda bu işlem gerçekleştiğinde, tarayıcı JSTL etiketlerini anlamadığı için olduğu gibi yazdırılacaktır.

public class MyTaglib extends SimpleTagSupport { 
     @Override public void doTag() throws JspException, IOException { 
     getJspContext().getOut().println("My enclosed tag"); 
     getJspBody().invoke(null); 
     } 
    } 

İsteğe bağlı dizeye HTML etiketleri ekleyebilir.

+1

Çünkü böyle bir JSTL etiketi üçüncü taraf bir şablon değerlendirmesinden geliyordu. –