2010-11-29 13 views
7

Estoy escribiendo algunas declaraciones de SpEL en XML, y no puedo hacer que el analizador determine cuándo necesito escapar de un personaje.¿Cómo puedo escapar de los valores en SpEL?

He intentado lo siguiente:

<... property="someProperty" value="#{ someBean.aMethodOnTheBean('st\'ring') }" /> 

Sin embargo la adición en el \' no parece escapar de esa comilla simple y sigo recibiendo una excepción de analizador.

¿Hay alguna forma de escapar de estos valores?

+1

# {someBean.aMethodOnTheBean (T) (org.apache.commons.lang.StringEscapeUtils .escapeJavaScript ("ad'sf"))} funciona, pero no es muy limpio – Scott

+0

Niza intento! Por cierto, ese enfoque está documentado en un ejemplo sobre la [sección de creación de plantillas] (http://docs.spring.io/spring/docs/current/spring- framework -reference/html/expressions.html#expressions-templating). – falsarella

+0

Además, esa podría ser una opción para quién está usando [marcador de posición de la propiedad de primavera] (http://www.javacodegeeks.com/2013/01/spring-property-placeholder-configurer-a-few-not-so-obvious- options.html) (aunque no pude entender cómo usarlo correctamente en esa situación, así que terminé escapando los valores en el archivo '.properties' directamente). – falsarella

Respuesta

15

Desde el documentation:

"para poner una sola cita en sí en una cadena usar dos comillas simples caracteres."

expression = 'something = ''' + someMethod.getValue + ''''

0

he modificado a:

.... value="#{ someBean.aMethodOnTheBean("st'ring") }" 

Esto funciona, recordé incorrectamente que tuve problemas al utilizar comillas dobles para introducir un valor de cadena en una función SpEL anterior.

A continuación se muestra la definición de esquema:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:util="http://www.springframework.org/schema/util" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd" 
     default-lazy-init="true" 
     default-init-method="initialize"> 

El XML valida adecuadamente en eclipse. Sin embargo, mi ejemplo simplificado no era válido: mis disculpas y buena aceptación. De hecho, estoy estableciendo el valor de la siguiente manera:

<bean id="someBean" class="someClass"> 
    <property name="someList"> 
     <list> 
      <value>"#{ anotherBean.methodOnBean("some'String") }"</value> 
     </list> 
    </property> 
</bean> 
+0

¿El contenido de SO está corrupto de alguna manera o te di mal? Estoy bastante seguro: '' no es XML válido. –

0

Fwiw, SpEL tiene soporte para comillas dobles partir de la versión 3.2. SPR-9620

Cuestiones relacionadas