Definición de símbolos de iteración

Dentro del código <symbolDefinitions>, puede definir un símbolo de iteración utilizando el código <iterationSymbol>. Un símbolo de iteración representa un valor que se adquiere mediante la iteración a través de un conjunto de objetos en una matriz Java™, enumeración o colección. Para cada uno de los miembros, el correlacionador de solicitudes evalúa una o más expresiones de condición. Si una expresión devuelve true, el correlacionador de solicitudes utiliza el miembro para calcular el valor de retorno. Cuando un miembro cumple la expresión de condición, el correlacionador de solicitudes no evalúa el resto de los miembros.

Dentro del código <iterationSymbol>, utilice los códigos siguientes.
<name>
El nombre del símbolo. Es una serie y debe empezar con el carácter $.
<type>
El tipo del valor que devuelve el símbolo. Especifique este valor como un nombre de clase Java totalmente calificado o una primitiva Java. La especificación del tipo de símbolo es opcional. Si no se define, el correlacionador de solicitudes intenta establecer el tipo de campo según la expresión. Si el correlacionador de solicitudes no puede determinar el tipo de símbolo antes de evaluar la expresión, el rendimiento se ve afectado. Por tanto, para un rendimiento óptimo, es mejor especificar el tipo.
<args>
Los argumentos para el símbolo. Este código es opcional; si se especifica, deben proporcionarse argumentos para la evaluación del símbolo. Para obtener más información, consulte Definición de argumentos de símbolo.
<iterate over="expresión">
Define el objeto (matriz, enumeración o colección) que contiene los miembros en los que iterar. La expresión debe devolver un objeto así. El correlacionador de solicitudes itera en sus miembros hasta que uno de ellos hace que la expresión de condición devuelva true, o no queden más miembros. Defina el conjunto de expresiones de iteración en códigos dentro de este código:
<test>
Defina la condición y la expresión de devolución dentro de este código. Un código <iterate> puede contener varios códigos <test>. En este caso, el correlacionador de solicitudes los evalúa todos. Si una expresión de condición es verdadera, el símbolo devuelve un valor utilizando la expresión de resultado en el mismo código <test> y no se realizan más evaluaciones.
<castTo>
Opcional: Si este códigos está presente, especifique el nombre de un tipo Java dentro de él, como un nombre de clase Java totalmente calificado o una primitiva Java. El correlacionador de solicitudes convierte el elemento iterado a este tipo antes evaluar la condición y devolver expresiones. Si este código no está presente, el correlacionador de solicitudes convierte un miembro de una matriz al tipo base de matriz, y un miembro de una enumeración o colección en java.lang.Object. Para un miembro de matriz, el tipo base de matriz es normalmente la opción correcta; por tanto, utilice este código para que el correlacionador de solicitudes itere sobre una enumeración o colección.
<condition>
Una expresión que debe ofrecer un valor booleano. Utilice $iterElement para hacer referencia al elemento que se está iterando.
<return>
Si la expresión en el código <condition> devuelve true, el correlacionador de solicitudes evalúa la expresión en el código <return>. El símbolo de iteración devuelve el valor que genera esta expresión. Utilice $iterElement para hacer referencia al elemento que se está iterando.
<defaultValue>
Opcional. Si el correlacionador de solicitudes ha iterado sobre todos los miembros del objeto, pero ninguna expresión de condición ha devuelto true, el correlacionador de solicitudes evalúa la expresión en el código <defaultValue>. El símbolo de iteración devuelve el valor que genera la expresión. Si este código no está presente, el valor predeterminado es null.

Ejemplos

<iterationSymbol>
  <name>$userNameCookieValue</name>
  <iterate over="$httpServletRequest.getCookies()">
     <test>
        <condition>$iterElement.getName().equals("userName")</condition>
        <return>$iterElement.getValue()</return>
     </test>
   </iterate>
</iterationSymbol>

Este símbolo busca la cookie denominada "username" y devuelve su valor. $httpServletRequest.getCookies() devuelve una matriz, por lo que no es necesario el elemento <castTo>.

<iterationSymbol>
  <name>$headerNameStartingWithA</name>
  <iterate over="$httpServletRequest.getHeaderNames()">
    <test>
       <castTo>java.lang.String</castTo>
       <condition>$iterElement.startsWith("A")</condition>
       <return>$iterElement</return>
    </test>
  </iterate>
</iterationSymbol>
Este símbolo busca la cabecera con un nombre que empieza por " A " y devuelve su nombre. $httpServletRequest.getHeaderNames() devuelve una enumeración, por lo que el elemento <castTo> es necesario.

<iterationSymbol>
  <name>$determined_gender</name>
  <iterate over="$children">
    <test>
       <castTo>java.lang.String</castTo>
       <condition>$iterElement.equals("male")</condition>
       <return>"It's a boy"</return>
    </test>
    <test>
       <castTo>java.lang.String</castTo>
       <condition>$iterElement.equals("female")</condition>
       <return>"It's a girl"</return>
    </test>
  </iterate>
  <defaultValue>"unknown"</defaultValue>
</iterationSymbol>
Este símbolo itera en $children, que tiene que se una matriz, enumeración o colección de series. Si alguna de las series es igual a "male", devuelve "it’s a boy". Si alguna de las series es igual a "female", devuelve "it’s a girl". Finalmente, si ninguna serie en el objeto $children es igual a "male" o "female", el símbolo devuelve "unknown".