2010-01-19 1 views
3

c : if 테스트는 항상 실패하고 루프 내부로 들어 가지 않습니다. 나는조건부 체크 인 c : 항상 실패한 경우

<s:decorate template="/layout/display-text.xhtml"> 
    <c:set var="array" value="#{_mybean.value}"/> 
    <c:set var="space" value="#{fn:split(array, ' ')}"/> 
    <c:set var="len" value="#{fn:length(space)}"/> 
    <h:outputText value="total length = #{len}"/><br/> 
    <c:forEach begin="0" end="5" var="index"> 
     <h:outputText value="index = #{index}, value = #{space[index]}"/><br/> 
     <c:set var="val" value="#{space[index]}"/> 
     <c:if test="#{fn:startsWith(val, 'GAP')}"> 
      <h:outputText value="Found keyword parameter GAP" /><br/> 
     </c:if> 
    </c:forEach> 
</s:decorate> 

답변

7

URI가 무효 인 JSTL 코어를 분할 할

xmlns:fn="http://java.sun.com/jsp/jstl/functions" 
xmlns:c="http://java.sun.com/jstl/core" 

문자열 ('배열') "톰과 제리는 GAP1 친구"이며 다음 네임 스페이스를 사용하고 있습니다. 그것이 있어야 JSTL TLD에 따라 (/jsp 여분주의) :

xmlns:c="http://java.sun.com/jsp/jstl/core" 

좋은 생각 적이있다 JSTL과 JSF를 혼합 말했다. 코딩에서 예상하는 것처럼 동기화되지 않기 때문에 항상 기대했던대로 결과를 제공하지는 않습니다. JSP/JSTL이 위에서 아래로 먼저 실행 한 다음 생성 된 결과를 JSF로 넘겨서 위에서 아래로 다시 처리하는 것이 더 중요합니다. 그러면 특정 구성이 실패하게됩니다. pure JSF 구성 요소/속성을 대신 사용하십시오.

대신 c:forEach

오히려 Seam의 a4j:repeat 또는 Facelets의 ' ui:repeat 대신 전환 할 수있는 JSF 구성 요소의 rendered 속성의 c:if 메이크업의 사용이/숨기기를 보여주기 위해 사용합니다. JSTL c:set 대신 관리 Bean 생성자 또는 동작 메소드 또는 getter에 적절한 코드 로직을 작성하십시오.

그러나 JSTL 함수 (fn) taglib는 여전히 JSF에서 매우 가치가 있습니다. 계속 사용할 수 있습니다.

+0

다음 코드를 변경했습니다. xmlns : c = "http://java.sun.com/jsp/jstl/core 모든 디버그 명령문 (h : outputText)은 나를 위해 빈 값을 출력합니다. 모든 fn : 함수가 여기서 제대로 작동하는지 확인하십시오. 그 밖의 무엇이 나는 여기에 없습니까? – Achaius

+0

http://www.ilikespam.com/blog/c:foreach-vs-ui:repeat-in-facelets. 위에서 언급 한 것처럼 c : forEach와 c : if를 제거하면 값이 페이지에 적용될 때가 아니라 뷰가 빌드 될 때 평가됩니다. – mtpettyp