FaceLets: Nome do feijão que passava com a interface do usuário: Param to Action Atributo
Pergunta
Devido a alguns componentes personalizados que esperam um nome de feijão (não a instância do feijão) em seus atributos, preciso passar o nome real do feijão entre as páginas. Como o próprio feijão também é usado por componentes que não são do cliente, gostaria de evitar o uso de adicionais ui:param
(como descrito aqui Ação passando emu003Crich:modalPanel>) como especificará essencialmente o mesmo feijão.
É possível especificar a ação do componente usando o nome do feijão fornecido com ui:param
?
Basicamente, estou tentando alcançar o seguinte:
<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>
e template.xhtml IS
<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>
Embora o método de exclusão seja adequadamente definido (verificado com action="#{sessionBean.delete}"
) O código acima me dá
javax.faces.facesexception: #{beanname.delete}: javax.el.methodnotfoundException: /template.xhtml @201,89 action = " #{beanname.delete}": método não encontrado: sessionbean.delete ()
Solução
Você deve poder fazer referência ao feijão por meio de seu escopo:
<a4j:commandButton value="test"
action="#{sessionScope[beanName].delete}"/>
Outras dicas
<a4j:commandButton value="test" action="#{bean[action]}" />
Os parâmetros para passar
<ui:param name="bean" value="#{sessionBean}" />
<ui:param name="action" value="delete" />
você pode usar #{bean['delete']}
Se o seu nome de ação for corrigido.