Hành vi này cũng có thể được loại bỏ ở một mức độ nhất định bằng cách đặt thuộc tính JSP 2.1 trimDirectiveWhitespaces
thành true
. Điều này có thể được kích hoạt trong các tập tin JSP cá nhân bằng cách:
<%@page trimDirectiveWhitespaces="true" %>
Hoặc trên tất cả file JSP bởi các mục sau đây trong web.xml
(mà cần phải được khai báo 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>
Trong trước -JSP 2.1 container hoặc trong các thùng chứa JSP 2.1 mà thực sự không hỗ trợ điều này vì một số lý do bên trong, chẳng hạn như Tomcat, bạn cần tham khảo tài liệu JspServlet
của mình cho bất kỳ tham số khởi tạo nào. Trong ví dụ Tomcat, bạn có thể cấu hình nó cũng bằng cách thiết lập trimSpaces
init-param của JspServlet
để true
trong /conf/web.xml
Tomcat:
<init-param>
<param-name>trimSpaces</param-name>
<param-value>true</param-value>
</init-param>
Ghi nhận nên rằng cách tiếp cận cả hai không thực sự "format" mã HTML . Nó thực sự chỉ cắt tỉa khoảng trắng được để lại bởi taglibs và tập lệnh. Xem thêm this Sun article. Vì vậy, ví dụ như sau ..
<ul>
<c:forEach items="${list}" var="item">
<li>${item}</li>
</c:forEach>
</ul>
..would về cơ bản kết thúc trong
<ul>
<li>item1</li>
<li>item2</li>
<li>item3</li>
</ul>
Như vậy với thụt đầu dòng kép. Bạn thực sự có thể workaround này bằng cách format mã như vậy mà thẻ JSP là nửa thụt:
<ul>
<c:forEach items="${list}" var="item">
<li>${item}</li>
</c:forEach>
</ul>
Nhưng tôi nghĩ rằng JTidyFilter là dễ dàng hơn đây :)
Rất mát mẻ. Cảm ơn câu trả lời !!! – Freiheit
Tôi cũng muốn lưu ý rằng JTidyFilter vẫn còn hơi thô và không có bản phát hành chính thức. Bạn phải tải xuống từ các đêm JTidy tại: http://jtidy.sourceforge.net/nightly/ – Freiheit