Как мне избежать значений в SpEL? - PullRequest
10 голосов
/ 30 ноября 2010

Я пишу некоторые операторы SpEL в XML, и я не могу заставить анализатор определить, когда мне нужно экранировать символ.

Я попытался сделать следующее:

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

Однако добавление в \ ', похоже, не исключает этой одинарной кавычки, и я продолжаю получать исключение синтаксического анализатора.

Есть ли способ избежать этих значений?

Ответы [ 3 ]

18 голосов
/ 01 июня 2011

Из документации :

"Чтобы поместить отдельную кавычку в строку, используйте два символа одинарных кавычек."

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

0 голосов
/ 19 июня 2015

FWIW, SpEL поддерживает двойные кавычки начиная с версии 3.2. SPR-9620

0 голосов
/ 30 ноября 2010

Я изменил на:

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

Это работает, я неправильно помню, что у меня были проблемы при использовании двойной кавычки для ввода строкового значения в функцию SpEL.

Ниже приведено определение схемы:

<?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">

XML правильно проверяется в eclipse. Однако мой упрощенный пример оказался недействительным - мои извинения и хороший улов. Я на самом деле устанавливаю значение следующим образом:

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