2011-08-10 2 views
10

Czy możliwe jest skrócenie czasu generowanego przez moje własne tagi JSP? Na przykład znacznik zdefiniowany poniżej generuje 5 linii zamiast 1. Czy można tego uniknąć (bez połączenia wszystkich 5 linii w 1 w źródle tagu)?Jak skrócić dane wyjściowe wygenerowane przez niestandardowy znacznik JSP?

<%@ tag description="link" pageEncoding="UTF-8"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<%@ attribute name="href" required="true" type="java.lang.String" %> 
<%@ attribute name="label" required="false" type="java.lang.String" %> 
<a href="<c:url value="${href}"/>">${not empty label ? label : href}</a> 

nie rozwiązanie:

<%@ tag description="standard input" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ attribute name="href" required="true" type="java.lang.String" description="address relative to web-app context" %><%@ attribute name="label" required="false" type="java.lang.String" description="link label" %><a href="<c:url value="${href}"/>">${not empty label ? label : href}</a> 
+0

Nie jest to dokładna dupe z drugiej pytanie: w jaki sposób można przyciąć białymi wyjście przez tagu niestandardowego bez po prostu usuwa wszystkie spacje w tagu? Nie możesz użyć <% @ page trimDirectiveWhitespaces = "true"%> w tagu. – werkshy

+2

Poprawną odpowiedzią jest to, że można dodać to w tagu: '<% @ tag trimDirectiveWhitespaces =" true "%>' – werkshy

+0

powinien zostać ponownie otwarty, ponieważ poprawna odpowiedź (patrz komentarze) różni się od oryginalnego pytania. –

Odpowiedz

7

Tak, można skonfigurować globalnie parser JSP do przycinania białe znaki, które są pozostawione przez wyrażenia skryptów i znaczniki.

Dodaj to Twój webapp na web.xml (który ma być Servlet 2.5 kompatybilne!):

<jsp-config> 
    <jsp-property-group> 
     <url-pattern>*.jsp</url-pattern> 
     <trim-directive-whitespaces>true</trim-directive-whitespaces> 
    </jsp-property-group> 
</jsp-config> 

Jeśli kierujesz aplet 2.4 pojemnik lub niższą, potem trzeba edytować pojemnik własnego web.xml zamiast zastosować ten globalnie. W Tomcat na przykład jest to plik /conf/web.xml. Wyszukaj deklarację <servlet> z JspServlet i dodaj następujący parametr inicjujący serwletu do deklaracji <servlet>.

<init-param> 
    <param-name>trimSpaces</param-name> 
    <param-value>true</param-value> 
</init-param> 
+0

Powinieneś pogrubić ** Kompatybilny z serwletem 2.5 ** – Vlad

+1

@Vlad: Cóż, 5 lat temu zrobiłbym. Ale teraz, Servlet 2.5 jest już niedostępny na 5 lat ... Spodziewałbym się, że wszyscy już to wykorzystają;) Myślę, że ten wykrzyknik jest wystarczający. – BalusC

+2

'' działa tylko dla stron .jsp (to samo co '<% @ strona trimDirectiveWhitespaces =" true "%>'), ale nie działa dla mojego własnego generowanego wyjścia. Tylko "trimSpaces" jako init param w ogóle działa i dostaje 1-liniowy wynik mojego tagu. – marioosh

3

W swojej JSP:

<%@ page trimDirectiveWhitespaces="true" %> 
+0

Używam Tomcat 7.0.19 (Servlet 3.0, JSP 2.2) i '<% @ strona trimDirectiveWhitespaces =" true "%>' działa na stronie jsp, ale nie na źródle tagu ('link.tag' w moim przykładzie) . Używanie tej dyrektywy na stronie, na której wykorzystywany jest mój własny tag, nie zmniejsza produkcji tagu. – marioosh

+0

@marioosh ok, cóż, może powinieneś po prostu przyciąć() wyjście twojego tagu –

+0

Jak to zrobić z tagiem jak w moim pytaniu? – marioosh

15

Jak już wskazał werkshy, aby uniknąć białymi generowane przez dyrektyw stosowanych w niestandardowym tagu JSP,

<%@ tag trimDirectiveWhitespaces="true" %> 

mogą być wykorzystane (<% @ strona trimDirectiveWhitespaces = "true"%> nie pomaga w tym przypadku, ponieważ ma zastosowanie tylko do dyrektyw w samej stronie JSP, a nie w niestandardowych tagach używanych przez stronę).

Jednakże, aby zezwolić na ten atrybut znacznika, może być konieczne określenie wersji JSP 2.1. za pomocą niejawnego.tld (jak opisano na https://docs.oracle.com/javaee/5/tutorial/doc/bnamu.html lub https://forums.oracle.com/thread/742224), który następnie musi zostać umieszczony w katalogu z tagami. (Przynajmniej ja potrzebowałem zrobić dla WebLogic 12c).

implicit.tld:

<?xml version="1.0" encoding="UTF-8"?> 
<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"> 
    <tlib-version>1.0</tlib-version> 
    <short-name>implicit</short-name> 
</taglib>