2011-01-18 5 views
4

목록의 첫 번째 항목과 마지막 항목에 특수 클래스가 할당 된 JSP 파일이 있습니다.JSTL c : set 문에서 공백을 피하십시오.

<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>> 
이 경우 문제는 경우에 하나 개의 결과 만있을 때,이다

는, 클래스가 (어떤 작품) '최초의 마지막'이되어야하지만, 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> 

그러나 나는 읽을 수있는 변형을 선호합니다. 또 다른 대안은 초과 공백을 제거하는 함수를 통해 결과를 가져 오는 것입니다.

질문 : 공백을 <c:set> 태그에서 이와 같이 설정하지 않도록하는 방법이나 기술이 있습니까?

답변

7

나는 조건 연산자 ?:의 도움으로 value 속성에서 바로 처리 할 것입니다.

하지 꽤 <li> 부분에 대한
<c:set var="liclass" value="${rowStatus.first ? 'first' : ''}" /> 
<c:set var="liclass" value="${liclass}${rowStatus.last ? ' last' : ''}" /> 

, 난 그냥

<c:set var="liclass" value="${empty liclass ? 'none' : liclass}" /> 

추가 거라고 및

<li class="${liclass}"> 

진정한 수행은 마지막/비 첫째위한 class="none" 겉보기에 쓸모없는 요소를 추가합니다 ,하지만 누가 신경 써?


는 구체적인 질문에, 당신은 공백 true@pagetrimDirectiveWhitespaces 특성을 설정하여 태그 라이브러리 왼쪽 트림 할 수 있습니다.

<%@page trimDirectiveWhitespaces="true" %> 

이 (서블릿 2.5에서 작동/JSP 2.1 컨테이너 전용)은

또한 servletcontainer 수준에서 구성 할 수 있습니다. 당신이 여기 사용하여 단지 아파치 톰캣 예제중인 하나 불분명하기 때문에 : Tomcat/conf/web.xml 추가의 JSP 서블릿 항목에/다음 초기화 매개 변수를 편집 :

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

어느 쪽이든, 난의 상단에서 말할 수 없다 first last으로 끝나는 원하는 효과를 얻을 것이라고 보증하거나 보증하지 않습니다. 직접 시도해야합니다.

+0

아주 좋은 답변입니다. 감사합니다. EL 표현식에서 조건부 연산자 (삼항 연산자)를 알지 못했습니다. 그런 식으로 검색했지만 어디서나 찾을 수 없었습니다. JSP/JSTL 문서가 더 좋을 수 있습니다. 쓸모없는 계급에 관해서는 - 나는 신경 쓰지 만 D. Firebug로 코드를 살펴보면, 죽은 속성이 나를 겁나게 만듭니다. trimDirectiveWhitespaces 속성은 내가 알지 못했던 또 다른 것입니다.이 경우도 다른 프로젝트/케이스에서나 도움이 될 것입니다. 고마워요! – fwielstra