Это действительно не действительно EL. Вы не можете смешивать имена методов и аргументы в одной переменной. Это должно работать:
<ui:include src="...">
<ui:param name="acceptButtonBean" value="#{repoHome}" />
<ui:param name="acceptButtonAction" value="removeIndividualDocument" />
<ui:param name="acceptButtonArgument" value="#{doc.id}" />
</ui:include>
с
<h:commandButton value="Continue"
action="#{acceptButtonBean[acceptButtonAction](acceptButtonArgument)}" />
Обратите внимание, что это относится не только к JSF, но и к EL. Если бы это была ошибка или особенность, вам нужно было бы прочитать спецификацию EL или сообщить об этом ребятам EL, а не JSF. JSF не виноват здесь. EL - это полностью автономный API, который JSF использует.
Обновление: оказывается, что он работает на Tomcat 7 (и, вероятно, на любом другом контейнере с реализацией org.apache.el.*
), но не на Glassfish 3 (с реализацией com.sun.el.*
). При отображении страницы происходит сбой следующим образом:
Caused by: javax.el.ELException: Error Parsing: #{p1[p2](p3)}
at com.sun.el.lang.ExpressionBuilder.createNodeInternal(ExpressionBuilder.java:174)
at com.sun.el.lang.ExpressionBuilder.build(ExpressionBuilder.java:191)
at com.sun.el.lang.ExpressionBuilder.createMethodExpression(ExpressionBuilder.java:242)
at com.sun.el.ExpressionFactoryImpl.createMethodExpression(ExpressionFactoryImpl.java:81)
at org.jboss.weld.util.el.ForwardingExpressionFactory.createMethodExpression(ForwardingExpressionFactory.java:43)
at org.jboss.weld.el.WeldExpressionFactory.createMethodExpression(WeldExpressionFactory.java:62)
at com.sun.faces.facelets.tag.TagAttributeImpl.getMethodExpression(TagAttributeImpl.java:222)
... 63 more
Caused by: com.sun.el.parser.ParseException: Encountered "(" at line 1, column 9.
Was expecting one of:
(*snip*)
Я проверил главу 1.19 спецификации EL 2.2 :
ValueSuffix ::= ‘.’ Identifier MethodParameters?
| ‘[‘ Expression ‘]’ MethodParameters? <-- Look here
MethodParameters ::= '(' (Expression (‘,’ Expression )* )? ')'
и я вполне уверен, что Tomcat прав. Пришло время сообщить об ошибке мальчикам из Glassfish: GLASSFISH-17628 .
Обновление 2: вы, похоже, действительно используете JBoss 7. Я не знаю, какой именно Tomcat 7 он использует, но я могу подтвердить, что могу воспроизвести вашу проблему с Tomcat 7.0.19 ; после нажатия кнопки происходит сбой следующим образом:
Caused by: javax.el.MethodNotFoundException: /test.xhtml @22,62 action="#{p1[p2](p3)}": Method not found: com.example.Bean@2616aa35.submit(java.lang.String)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:109)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
... 24 more
Я использовал Tomcat 7.0.22, когда он успешно работал, поэтому он был исправлен где-то между Tomcat 7.0.20 и 7.0.22.