Как сократить результат, генерируемый пользовательским тегом JSP?
Можно ли сделать вывод, сгенерированный моими собственными тегами JSP, короче? Например, тег, определенный ниже, генерирует 5 строк вместо 1. Возможно ли это избежать (без объединения всех 5 строк в 1 в источнике тега)?
<%@ 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>
Ответы
Ответ 1
Да, вы можете глобально настроить JSP-парсер, чтобы обрезать пробелы, оставленные выражениями и тегами script.
Добавьте это в свой webapp web.xml
(который должен быть совместим с Servlet 2.5!):
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<trim-directive-whitespaces>true</trim-directive-whitespaces>
</jsp-property-group>
</jsp-config>
Если вы нацеливаетесь на контейнер Servlet 2.4 или ниже, тогда вам нужно изменить собственный контейнер web.xml
, чтобы применить его глобально. Например, в Tomcat это файл /conf/web.xml
. Найдите объявление <servlet>
JspServlet
и добавьте следующий параметр init для сервлета внутри объявления <servlet>
.
<init-param>
<param-name>trimSpaces</param-name>
<param-value>true</param-value>
</init-param>
Ответ 2
Как уже указывалось werkshy, чтобы избежать пробелов, генерируемых директивами, используемыми в пользовательском теге JSP,
<%@ tag trimDirectiveWhitespaces="true" %>
можно использовать (<% @page trimDirectiveWhitespaces = "true" % > в этом случае не помогает, поскольку это, похоже, применимо только к директивам самого JSP, а не к пользовательским тегам, используемым этой страницей).
Однако, чтобы разрешить этот атрибут тега, может потребоваться указать JSP версии 2.1, например. используя implicit.tld(как описано в https://docs.oracle.com/javaee/5/tutorial/doc/bnamu.html или https://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>
Ответ 3
В вашем JSP:
<%@ page trimDirectiveWhitespaces="true" %>