2011-08-10 42 views
10

是否有可能使我自己的JSP標籤生成的輸出更短?例如下面定義的標籤會生成5行而不是1.可以避免這種情況(在標籤源中沒有將所有5行連接到1)?如何縮短自定義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> 

不是一個解決方案:

<%@ 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

這是不是其他問題的確切欺騙:一個人如何修剪通過自定義標籤的空白輸出而不只需刪除標籤內的所有空格?您不能在標籤中使用<%@ page trimDirectiveWhitespaces =「true」%>。 – werkshy

+2

正確的答案是可以在標籤中加入:'<%@ tag trimDirectiveWhitespaces =「true」%>' – werkshy

+0

應該重新打開,因爲正確答案(請參閱評論)與原始問題不同。 –

回答

7

是的,你可以在全局配置JSP解析器修剪空白它們通過腳本表達式和標籤離開。

添加到您的web應用程序的web.xml(這必須是Servlet 2.5的兼容!):如果你瞄準一個Servlet 2.4容器或更低

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

,那麼你必須編輯容器本身web.xml而不是將此全球。例如在Tomcat中,它是/conf/web.xml文件。搜索JspServlet<servlet>聲明並在<servlet>聲明中添加以下servlet init參數。

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

你應該大膽** Servlet 2.5兼容** – Vlad

+1

@Vlad:那麼,5年前我會這樣做。但是現在,Servlet 2.5已經用了5年了......我希望每個人都已經在使用它了)我覺得那個感嘆號就足夠了。 – BalusC

+2

''僅適用於.jsp頁面(與<%@ page trimDirectiveWhitespaces =「true」%>'相同),但不適用於我自己的標記生成的輸出。只有'trimSpaces'作爲初始參數可以運行,並獲得我的標籤的單行輸出。 – marioosh

3

在你的JSP:

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

我使用Tomcat 7.0.19(Servlet 3.0,JSP 2.2)和'<%@ page trimDirectiveWhitespaces =「true」%>'在jsp頁面上工作,但不在標籤源上(在我的例子中爲'link.tag') 。在使用我自己的標籤的頁面上使用該指令不會減少標籤的輸出。 – marioosh

+0

@marioosh ok,那麼也許你應該修剪()你的標籤的輸出 –

+0

如何做到這一點與我的問題標籤? – marioosh

15

前面已經指出的werkshy,以避免在JSP定製標記使用的指令生成的空白之中,

<%@ tag trimDirectiveWhitespaces="true" %> 

都可以使用( <%@ trimDirectiveWhitespaces =「true」%>在這種情況下不起作用,因爲它似乎只適用於JSP本身的指令,而不適用於頁面使用的自定義標籤)。

但是,要允許此標記屬性,可能需要指定JSP版本2.1,例如,使用implicit.tld(如https://docs.oracle.com/javaee/5/tutorial/doc/bnamu.htmlhttps://forums.oracle.com/thread/742224所述),然後需要將其放置到包含標籤的目錄中。 (至少我需要做的是爲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> 
相關問題