我有一个生成LI列表的JSP文件,其中列表中的第一个和最后一个项目分配给它们的特殊类.我目前使用以下位: c:set var="liclass" c:if test="${rowStatus.first}"first/c:if c:if test="${rowStatus.last}" last/c
<c:set var="liclass"> <c:if test="${rowStatus.first}">first</c:if> <c:if test="${rowStatus.last}"> last</c:if> </c:set> <%-- not very pretty --%> <li<c:if test="${not empty liclass}"> class="${liclass}"</c:if>>
在这种情况下的问题是,在只有一个结果的情况下,该类应该变为“第一个最后”(它起作用),但它最后变为[…],其中[…]表示一堆SO过滤掉的空白.
似乎< c:set>也使用由缩进引起的空白.我可以通过键入它而不用空格来解决它:
<c:set var="liclass"><c:if test="${rowStatus.first}">first</c:if><c:if test="${rowStatus.last}"> last</c:if></c:set>
但我更喜欢可读的变体.另一种方法是通过一个删除多余空格的函数来拉取结果.
问题:是否有一种方法或技术可以避免在< c:set> -tag中设置这样的空格?
我在条件运算符的帮助下直接在value属性中做到了吗?:.<c:set var="liclass" value="${rowStatus.first ? 'first' : ''}" /> <c:set var="liclass" value="${liclass}${rowStatus.last ? ' last' : ''}" />
对于不漂亮的< li>部分,我只是补充一下
<c:set var="liclass" value="${empty liclass ? 'none' : liclass}" />
并做
<li class="${liclass}">
没错,它为非第一个/最后一个元素添加了一个看似毫无价值的类=“无”,但谁在乎呢?
至于具体问题,你可以通过将@page的trimDirectiveWhitespaces属性设置为true来修剪taglibs留下的空白.
<%@page trimDirectiveWhitespaces="true" %>
(仅适用于Servlet 2.5 / JSP 2.1容器)
您也可以在servletcontainer级别配置它.由于不清楚您正在使用哪一个,这里只是一个Apache Tomcat示例:在Tomcat / conf / web.xml中的JSP servlet条目中添加/编辑以下初始化参数:
<init-param> <param-name>trimSpaces</param-name> <param-value>true</param-value> </init-param>
无论哪种方式,我都无法从头顶分辨出来,也不能保证它能达到预期的效果.你必须自己尝试一下.