2010-10-25 7 views
0
<%@ tag language="java" pageEncoding="utf-8" isELIgnored="false" %> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 
<%@ tag import="com.ocpsoft.pretty.time.PrettyTime, java.util.Date"%> 
<%@ attribute name="dateParam" required="true" type="java.util.Date" %> 

<% 
PrettyTime p = new PrettyTime(); 
String prettyDate = p.format(dateParam); 
jspContext.setAttribute("prettyDate", prettyDate.trim()); 
%> 
<c:out value="${prettyDate}"/> 

Я не могу понять, что я делаю что-то не так в этом теге.Почему этот пользовательский тег PrettyTime создает 11 строк чистого текста до «красивой» даты на выходе HTML?

библиотека

PrettyTime должна просто напечатать текст версию данных, например:

10 months ago 

Но я не могу сказать, почему этот обычай тег производит 11 строк текста пустого перед «довольно «дата в HTML-выходе?

ответ

1

Потому что, когда вы удаляете <% ...%>, есть еще новые строки, которые точно воспроизводятся в сгенерированном выходе.

4

Поскольку Торбьерн уже ответил на это, я отвечу только на решение, так как вы, вероятно, избавитесь от этой досады.

Вы можете настроить свой сервлетконтейнер, чтобы обрезать пробелы, оставшиеся после обработки скриптлетов и taglib. В, например, Apache Tomcat, вы можете сделать это, открыв /conf/web.xml, направляясь к <servlet> определения сервлета JSP, которые выглядят как следует на Tomcat 7

<servlet> 
    <servlet-name>jsp</servlet-name> 
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> 
    <init-param> 
     <param-name>fork</param-name> 
     <param-value>false</param-value> 
    </init-param> 
    <init-param> 
     <param-name>xpoweredBy</param-name> 
     <param-value>false</param-value> 
    </init-param> 
    <load-on-startup>3</load-on-startup> 
</servlet> 

добавить <init-param> из trimSpaces=true следующих к <servlet> определению сервлета JSP:

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

Restart Tomcat и это пробелы должно исчезнуть. По крайней мере, большинство из них исчезнет. Вам нужно только позаботиться о том, чтобы введенные вами пробелы также были удалены из JSP.

См. Также JSP engine HOW-TO. Довольно все остальные сервлетконтейнеры имеют аналогичную конфигурацию. Проконсультируйтесь с их документацией, используя ключевое слово "trim spaces".


Что касается общего подхода, я бы предложил преобразовать эту вещь в класс Java и вместо этого сделать ее функцией EL. Deathскриптлеты.

<c:out value="${my:prettyTime(date)}" />