fwi*_*tra 4 whitespace conditional jsp jstl el
我有一个生成LI列表的JSP文件,其中列表中的第一个和最后一个项目分配给它们的特殊类.我目前使用以下位:
<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>>
Run Code Online (Sandbox Code Playgroud)
在这种情况下的问题是,在只有一个结果的情况下,该类应该变为"第一个最后"(它起作用),但它变成了first [...] last
,其中[...]代表了一堆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>
Run Code Online (Sandbox Code Playgroud)
但我更喜欢可读的变体.另一种方法是通过一个删除多余空格的函数来拉取结果.
问题:是否有一种方法或技术可以避免在<c:set>
-tag中设置这样的空格?
我会value
在条件运算符的帮助下直接在属性中执行此操作?:
.
<c:set var="liclass" value="${rowStatus.first ? 'first' : ''}" />
<c:set var="liclass" value="${liclass}${rowStatus.last ? ' last' : ''}" />
Run Code Online (Sandbox Code Playgroud)
对于不漂亮的<li>
部分,我只是添加
<c:set var="liclass" value="${empty liclass ? 'none' : liclass}" />
Run Code Online (Sandbox Code Playgroud)
并做
<li class="${liclass}">
Run Code Online (Sandbox Code Playgroud)
没错,它class="none"
为非首先/最后一个元素添加了一个看似毫无价值的东西,但是谁在乎呢?
至于具体问题,你可以通过设置to 的trimDirectiveWhitespaces
属性来修剪taglibs留下的空白.@page
true
<%@page trimDirectiveWhitespaces="true" %>
Run Code Online (Sandbox Code Playgroud)
(仅适用于Servlet 2.5/JSP 2.1容器)
您也可以在servletcontainer级别配置它.由于不清楚你正在使用哪一个,这里只是一个Apache Tomcat示例:在JSP servlet条目中Tomcat/conf/web.xml
添加/编辑以下初始化参数:
<init-param>
<param-name>trimSpaces</param-name>
<param-value>true</param-value>
</init-param>
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,我无法从头顶分辨,也不能保证它能达到预期的效果first last
.你必须自己尝试一下.
归档时间: |
|
查看次数: |
6288 次 |
最近记录: |