JSF Composition: Como definir apenas o nome do mbean no template? [RESOLVIDO]

5 respostas
C

Pessoal,

Sobre o construção de interfaces com JSF composition.

Dado um Template.xhtml…

<?xml version='1.0' encoding='UTF-8'?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">

    <h:head>
    </h:head>

    <h:body>
        <h:form>

            <h:panelGroup>
                <h:commandButton action="#{mbean[doCancelar]}" value="Cancelar" />
                <h:commandButton action="#{mbean[doOk]}" value="OK" />
            </h:panelGroup>

        </h:form>
    </h:body>
</html>

E um CadastroXXX.xhtml que usa esse Template.xhtml…

<ui:composition template="Template.xhtml">

    <ui:param name="mbean" value="#{actCadastroXXX}" /> //DEFINE O MBEAN, OK!
    <ui:param name="doCancelar" value="doCancelar" /> //MAS ISSO EU NAO GOSTARIA DE FAZER EM TODOS OS CADASTROS...

</ui:composition>

Como eu poderia definir apenas o mbean ‘actCadastroXXX’ para ser usado no Template.xhtml, sem precisar definir os métodos ‘doCancelar’ e ‘doOk’ no CadastroXXX.xhtml?

O motivo é que tenho vários cadastros que utilizarão esse template, por isso gostaria de passar somente o mbean, e não os seus métodos, que serão fixos para todos os cadastros.

CadastroXXXAct.java:

@ManagedBean(name="actCadastroXXX")
@RequestScoped
public class CadastroXXXAct implements Serializable {

    public String doCancelar() {
        //TODO
    }

    public String doOk() {
       //TODO
    }
}

Alguma idéia ??

[]'s

5 Respostas

v1c70r_f

Opa,

<h:commandButton action="#{mbean.doCancelar}" value="Cancelar" />  
 <h:commandButton action="#{mbean.doOk}" value="OK" />

Como vc passa como parâmetro o mbean deveria funcionar normalmente.

o/

R

Olá.
Eu creio que não dá.Afinal,como o template vai saber que existe o método doCancelar
se não for alimentado pelo cadastro?

C

Funcionou :slight_smile:

Valeu!!

C

raf4ever,

Na verdade o template não sabe se o método existe, mas dará erro se não existir ao ser invocado!

Então eu passo como parâmetro para o template o ‘mbean’:

<ui:param name="mbean" value="#{actCadastroXXX}" />

E o template executará o action ‘doOk’:

<h:commandButton action="#{mbean.doOk}" value="OK" />

Eu precisei disso porque além das actions, preciso incluir no template vários atributos do mbean (para os respectivos campos), que no meu caso é comun a vários cadastros.
Então no form de cada cadastro eu defino apenas o mbean, sem necessidade de definir cada action e cada atributo. :wink:

Obrigado pela atenção de todos!!

v1c70r_f

Opa,

Legal carinha!!!

Edita lá o título do post para RESOLVIDO o/

Abraço.

Criado 7 de janeiro de 2011
Ultima resposta 7 de jan. de 2011
Respostas 5
Participantes 3