由于某些自定义组件在其属性中需要bean名称(而不是bean实例),我需要在页面之间传递实际的bean名称。由于bean本身也被非自定义组件使用,我想避免使用额外的ui:param
(如此处所述Passing action in <rich:modalPanel>),因为它基本上会指定相同的bean。
是否可以使用ui:param
提供的bean名称指定组件的操作?
基本上我正在努力实现以下目标:
<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()
答案 0 :(得分:5)
您应该能够通过其范围引用bean:
<a4j:commandButton value="test"
action="#{sessionScope[beanName].delete}"/>
答案 1 :(得分:2)
<a4j:commandButton value="test" action="#{bean[action]}" />
传递的参数
<ui:param name="bean" value="#{sessionBean}" />
<ui:param name="action" value="delete" />
如果您的操作名称已修复,则可以使用#{bean['delete']}
。