Из-за некоторых пользовательских компонентов, которые ожидают имя компонента (НЕ экземпляр компонента) в своих атрибутах, мне нужно передать фактическое имя компонента между страницами. Поскольку сам компонент также используется нестандартными компонентами, я хотел бы избежать использования дополнительных ui:param
(как описано здесь Passing action in <rich:modalPanel>), поскольку он будет по существу определять один и тот же компонент.facelets: передача имени bean с атрибутом ui: param to action
Можно ли указать действие компонента с использованием имени бобов, предоставленного с помощью ui:param
?
В основном я пытаюсь добиться следующего:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
template="/template.xhtml">
<ui:param name="beanName" value="sessionBean"/>
...
</ui:composition>
и template.xhtml является
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:a4j="http://richfaces.org/a4j"
template="/someothertemplate.xhtml">
</ui:define name="somename">
<h:form>
<a4j:commandButton value="test" action="#{beanName.delete}"/>
</h:form>
</ui:define>
</ui:composition>
Хотя метод удаления правильно определен (проверено с action="#{sessionBean.delete}"
) приведенный выше код дает мне
javax.faces.FacesException: # {beanName.delete}: javax.el.MethodNotFoundException:/templ ate.xhtml @ 201,89 действие = "# {} beanName.delete": Метод не найден: sessionBean.delete()
Опережаем здесь: bean должен быть уже создан и помещен в область действия - это выражение не создаст управляемый компонент. – McDowell
Спасибо, это решило! – orom
Привет :) Очень интересно. Но что такое «delete», это не параметр тега, а константа? Я имею в виду, должно ли оно быть выражением как '' # {sessionScope [beanName] '. Delete'} "или как скомбинировать выражение в этом случае? – user390525