SpEL 无法处理“”?

发布于 2024-12-22 04:50:13 字数 1609 浏览 1 评论 0原文

我是法国人,所以我在代码中添加了一些 é è ê ô û 。 (而且我英语说得不太好)。

我在类Formulaires中有一个类似的方法:

  public static Formulaire exposé()

在配置spring xml文件中,我尝试:

<entry 
key="intro" 
value="#{T(com.myproject.Formulaires).exposé()}"/>

但是Spring说:

Caused by: java.lang.IllegalStateException: Cannot handle (233) 'é'
    at org.springframework.expression.spel.standard.Tokenizer.process(Tokenizer.java:193)
    at org.springframework.expression.spel.standard.Tokenizer.<init>(Tokenizer.java:47)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.doParseExpression(InternalSpelExpressionParser.java:110)
    at org.springframework.expression.spel.standard.SpelExpressionParser.doParseExpression(SpelExpressionParser.java:56)
    at org.springframework.expression.spel.standard.SpelExpressionParser.doParseExpression(SpelExpressionParser.java:1)
    at org.springframework.expression.common.TemplateAwareExpressionParser.parseExpressions(TemplateAwareExpressionParser.java:128)
    at org.springframework.expression.common.TemplateAwareExpressionParser.parseTemplate(TemplateAwareExpressionParser.java:74)
    at org.springframework.expression.common.TemplateAwareExpressionParser.parseExpression(TemplateAwareExpressionParser.java:64)
    at org.springframework.context.expression.StandardBeanExpressionResolver.evaluate(StandardBeanExpressionResolver.java:119)
    ... 47 more

如果我输入e而不是é,一切都很好。

关于口音有一些 SpEL 限制吗?

我用的是spring 3.0.5。

谢谢。

I'm a french so I put some é è ê ô û in my code. (and I don't speek english very well).

I've a method like that in a class Formulaires:

  public static Formulaire exposé()

And in a config spring xml file, I try :

<entry 
key="intro" 
value="#{T(com.myproject.Formulaires).exposé()}"/>

But Spring says :

Caused by: java.lang.IllegalStateException: Cannot handle (233) 'é'
    at org.springframework.expression.spel.standard.Tokenizer.process(Tokenizer.java:193)
    at org.springframework.expression.spel.standard.Tokenizer.<init>(Tokenizer.java:47)
    at org.springframework.expression.spel.standard.InternalSpelExpressionParser.doParseExpression(InternalSpelExpressionParser.java:110)
    at org.springframework.expression.spel.standard.SpelExpressionParser.doParseExpression(SpelExpressionParser.java:56)
    at org.springframework.expression.spel.standard.SpelExpressionParser.doParseExpression(SpelExpressionParser.java:1)
    at org.springframework.expression.common.TemplateAwareExpressionParser.parseExpressions(TemplateAwareExpressionParser.java:128)
    at org.springframework.expression.common.TemplateAwareExpressionParser.parseTemplate(TemplateAwareExpressionParser.java:74)
    at org.springframework.expression.common.TemplateAwareExpressionParser.parseExpression(TemplateAwareExpressionParser.java:64)
    at org.springframework.context.expression.StandardBeanExpressionResolver.evaluate(StandardBeanExpressionResolver.java:119)
    ... 47 more

If I put e and not é all is good.

Is there some SpEL limit about accents ?

I use spring 3.0.5.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

血之狂魔 2024-12-29 04:50:13

基本 UTF-8 字符编码中不存在重音字符,Spring XML 文件可能使用它。正如错误所述,解析器无法处理重音字符。

您无法轻松解决此问题。重音字符也会在其他编程领域带来问题。我认为最好防止使用它们。

Accented characters do not exist in a basic UTF-8 character encoding and the Spring XML files probably use that. As the error says, the parser can't handle accented characters.

There's nothing that you can do to easily solve this problem. Accented characters will give problems in other areas of programming too. I think it would be best to prevent using them.

情释 2024-12-29 04:50:13

这里还有更多内容。 Tokenizer 中的下面的代码决定它是否是字母字符

private boolean isAlphabetic(char ch) {
    if (ch>255) {
        return false;
    }
    return (flags[ch] & IS_ALPHA)!=0;
}

您的字符 é <=255 但 flags[ch] 由下面的静态块初始化

static {
    for (int ch='0';ch<='9';ch++) {
        flags[ch]|=IS_DIGIT | IS_HEXDIGIT;
    }
    for (int ch='A';ch<='F';ch++) {
        flags[ch]|= IS_HEXDIGIT;
    }
    for (int ch='a';ch<='f';ch++) {
        flags[ch]|= IS_HEXDIGIT;
    }
    for (int ch='A';ch<='Z';ch++) {
        flags[ch]|= IS_ALPHA;
    }
    for (int ch='a';ch<='z';ch++) {
        flags[ch]|= IS_ALPHA;
    }

因此只能考虑 az 或 AZ ..

Here's more to it . The code below in Tokenizer decides if it's an alphabetic character

private boolean isAlphabetic(char ch) {
    if (ch>255) {
        return false;
    }
    return (flags[ch] & IS_ALPHA)!=0;
}

Your character é is <=255 but the flags[ch] is initialized by the static block below

static {
    for (int ch='0';ch<='9';ch++) {
        flags[ch]|=IS_DIGIT | IS_HEXDIGIT;
    }
    for (int ch='A';ch<='F';ch++) {
        flags[ch]|= IS_HEXDIGIT;
    }
    for (int ch='a';ch<='f';ch++) {
        flags[ch]|= IS_HEXDIGIT;
    }
    for (int ch='A';ch<='Z';ch++) {
        flags[ch]|= IS_ALPHA;
    }
    for (int ch='a';ch<='z';ch++) {
        flags[ch]|= IS_ALPHA;
    }

Hence only a-z or A-Z can be considered ..

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文