Definición de símbolos condicionales

Dentro del código <symbolDefinitions>, puede definir un símbolo condicional utilizando el código <conditionalSymbol>. Un símbolo condicional representa un valor que se adquiere mediante la evaluación de una serie de expresiones de condición. Si alguna 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 evalúa una expresión de devolución correspondiente y devuelve el resultado. Una vez el correlacionador de solicitudes encuentra un resultado para devolver, no evalúa más expresiones.

Dentro del código <conditionalSymbol>, 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.
<if condition="expresión">
El atributo condition define una expresión de condición a evaluar. La expresión debe ofrecer un valor booleano. Si el valor es true, el correlacionador de solicitudes utiliza el contenido del código <if> para intentar determinar el valor de retorno. El código <if> debe contener uno de los contenidos siguientes, pero no ambos:
  • Un código <return>. Este código contiene una expresión. Si la expresión de condición es verdadera, el correlacionador de solicitudes evalúa la expresión y devuelve el resultado.
  • Cualquier número de códigos <if>, anidados dentro de este código <if>. Si la expresión de condición es verdadera, el correlacionador de solicitudes procesa los códigos <if> anidados de la misma manera que un código <if> de nivel superior. Es decir, evalúa la expresión en el atributo condition y si la expresión es verdadera, utiliza el contenido del código para intentar determinar el valor de retorno.
Importante: Si se determina un valor de retorno, el correlacionador de solicitudes no evalúa más expresiones. Sin embargo, si una expresión de condición en un código <if> es verdadera, pero contiene códigos <if> anidados y ninguna de sus expresiones de condición es verdadera, no se determina ningún valor. En este caso, el correlacionador de solicitudes continúa evaluando las expresiones siguientes.
<defaultValue>
Opcional. Si el correlacionador de solicitudes ha evaluado todas las expresiones de condición, pero ninguna de ellas ha devuelto true, el correlacionador de solicitudes evalúa la expresión en el código <defaultValue>. El símbolo condicional devuelve el valor que genera la expresión. Si este código no está presente, el valor predeterminado es null.

Ejemplo

<symbol>
  <name>$GET</name>
  <eval>"GET"</eval>
</symbol>
<symbol>
  <name>$PUT</name>
  <eval>"PUT"</eval>
</symbol>
<conditionalSymbol>
  <name>$sessionAttribute</name>
  <if condition="$httpServletRequest.getSession(false) != null>
     <if condition="$httpServletRequest.getSession(false).getAttribute($GET) != null">
       <return>$httpServletRequest.getSession(false).getAttribute($GET)</return>
     </if>
     <if condition="true">
       <return>$httpServletRequest.getSession(false).getAttribute($PUT)</return>
      </if>
  </if>
</conditionalSymbol>

Se da por hecho que este símbolo forma parte del correlacionador de solicitudes de servlet. Primero, comprueba si existe una sesión HTTP para el servlet; si no, el símbolo devuelve null. Si existe una sesión, el símbolo comprueba si el servlet tiene un atributo GET, y devuelve el valor de ese atributo. De lo contrario, devuelve el valor del atributo PUT. La segunda expresión de condición es true; este valor se utiliza como una cláusula else. Si la primera condición es true, el correlacionador de solicitudes no evalúa más expresiones; de lo contrario, continúa con la segunda expresión.