Ответ 1
Вы должны иметь возможность ссылаться на bean по своей области:
<a4j:commandButton value="test"
action="#{sessionScope[beanName].delete}"/>
Из-за некоторых пользовательских компонентов, которые ожидают имя bean (не экземпляр bean) в своих атрибутах, мне нужно передать фактическое имя bean между страницами. Поскольку сам bean также используется нестандартными компонентами, я бы хотел избежать использования дополнительного ui:param
(как описано здесь Проходящее действие в < rich: modalPanel > ), поскольку он будет по существу указывать один и тот же bean.
Можно ли указать действие компонента с помощью имени bean, указанного в 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:/template.xhtml @201,89 action = "# {beanName.delete}": метод не найден: sessionBean.delete()
Вы должны иметь возможность ссылаться на bean по своей области:
<a4j:commandButton value="test"
action="#{sessionScope[beanName].delete}"/>
<a4j:commandButton value="test" action="#{bean[action]}" />
Параметры для передачи
<ui:param name="bean" value="#{sessionBean}" />
<ui:param name="action" value="delete" />
вы можете использовать #{bean['delete']}
, если ваше имя действия исправлено.