ELException при разборе условного выражения в свойстве стиля h: inputText - PullRequest
2 голосов
/ 16 июня 2011

У меня проблема с одним из моих пользовательских компонентов JSF.Мой компонент называется inputTextCustom.

На одной из страниц, где используется этот пользовательский компонент, у меня есть:

<s:inputTextCustom length="400px"/>

И в определении моего пользовательского компонента я использую h:inputText следующим образом:

<ui:composition>
....
....
<h:inputText style="width:#{empty length ? 500px : length}" />
....
....
</ui:composition>

Но я получаю следующее исключение:

javax.el.ELException: Error Parsing: width:#{empty length ? 500px : length}
    at org.apache.el.lang.ExpressionBuilder.createNodeInternal(ExpressionBuilder.java:125)
    at org.apache.el.lang.ExpressionBuilder.build(ExpressionBuilder.java:150)
    at org.apache.el.lang.ExpressionBuilder.createValueExpression(ExpressionBuilder.java:194)
    at org.apache.el.ExpressionFactoryImpl.createValueExpression(ExpressionFactoryImpl.java:68)
    at com.sun.facelets.tag.TagAttribute.getValueExpression(TagAttribute.java:256)
    ... 119 more
Caused by: org.apache.el.parser.ParseException: Encountered " "?" "? "" at line 1, column 22.
Was expecting one of:
    "}" ...
    "." ...
    "[" ...
    ">" ...
    "gt" ...
    "<" ...
    "lt" ...
    ">=" ...
    "ge" ...
    "<=" ...
    "le" ...
    "==" ...
    "eq" ...
    "!=" ...
    "ne" ...
    "&&" ...
    "and" ...
    "||" ...
    "or" ...
    "*" ...
    "+" ...
    "-" ...
    "/" ...
    "div" ...
    "%" ...
    "mod" ...

    at org.apache.el.parser.ELParser.generateParseException(ELParser.java:2142)
    at org.apache.el.parser.ELParser.jj_consume_token(ELParser.java:2024)
    at org.apache.el.parser.ELParser.DeferredExpression(ELParser.java:113)
    at org.apache.el.parser.ELParser.CompositeExpression(ELParser.java:40)
    at org.apache.el.lang.ExpressionBuilder.createNodeInternal(ExpressionBuilder.java:93)
    ... 123 more

Может кто-нибудь сказать мне, что я здесь не так делаю?

Заранее спасибо!

1 Ответ

1 голос
/ 16 июня 2011

Если вы хотите представить строковые значения в EL, вам необходимо явно заключить их в кавычки.

<h:inputText style="width:#{empty length ? '500px' : length}" />

Двойные кавычки также синтаксически допустимы, но обычно они не очень хорошо сочетаются с подсветкой синтаксисасредний редактор (также не тот, что здесь на SO), когда выражение встроено в значение атрибута тега, которое само заключено в двойные кавычки.

<h:inputText style="width:#{empty length ? "500px" : length}" />
...