Как конкатенировать строки в выражении EL?

Мне нужно создать обратный вызов для <h:commandButton>, а в качестве параметра мне нужно передать аргумент, связанный с строкой, с внешним идентификатором параметра:

Я попытался вставить выражение EL, как это:

<h:commandButton ... action="#{someController.doSomething('#{id}SomeTableId')}" />

Однако это не удалось с исключением EL. Что такое правильный синтаксис/подход для этого?

Ответ 1

Если вы уже используете EL 3.0 (Java EE 7, WildFly, Tomcat 8, GlassFish 4 и т.д.), вы можете использовать для этого новый оператор +=:

<h:commandButton ... action="#{someController.doSomething(id += 'SomeTableId')}" />

Если вы еще не используете EL 3.0, а левая - подлинный экземпляр java.lang.String (и, следовательно, не такой, например, java.lang.Long), то используйте функцию EL 2.2 для вызова прямых методов с аргументами, которые затем примените на String#concat():

<h:commandButton ... action="#{someController.doSomething(id.concat('SomeTableId'))}" />

Или, если вы еще не находитесь на EL 2.2, используйте JSTL <c:set> для создания новой EL-переменной с конкатенированными значениями, только что вложенными в значение:

<c:set var="tableId" value="#{id}SomeTableId" />
<h:commandButton ... action="#{someController.doSomething(tableId)}" />

См. также: