<!--
  Copyright 2002,2004 The Apache Software Foundation.
  
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at
  
       http://www.apache.org/licenses/LICENSE-2.0
  
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->

<j:jelly xmlns:j="jelly:core">

    <j:set var="simpleResult" value=""/>
    <j:forEach var="counter" begin="1" end="10">
       <j:set var="simpleResult" value="${simpleResult}${counter}"/>
       <j:if test="${counter==5}">
          <j:break/>
       </j:if>
    </j:forEach>
      
    <j:set var="conditionalResult" value=""/>
    <j:forEach var="counter" begin="1" end="10">
       <j:set var="conditionalResult" value="${conditionalResult}${counter}"/>
       <j:break test="${counter==5}"/>
    </j:forEach>  
    
    <j:set var="varBreaksResult" value=""/>
    <j:forEach var="counter" begin="1" end="10">
       <j:set var="varBreaksResult" value="${varBreaksResult}${counter}"/>
       <j:break var="varBroken" test="${counter==5}"/>
    </j:forEach>  

    <j:set var="varNoBreaksResult" value=""/>
    <j:forEach var="counter" begin="1" end="10">
       <j:set var="varNoBreaksResult" value="${varNoBreaksResult}${counter}"/>
       <j:break var="varNotBroken" test="${counter==11}"/>
    </j:forEach>  
    
    
</j:jelly>