Passar metodo em <ui:composition>

4 respostas
RicardoYukito
e possivel passar como parametro um metodo ? Exemplo : Crio um componente toolBar para usar em todos os cadastros do sistema. o que mudaria e de qual ManagedBean vai chamar o metodo Gravar.
<ui:composition 
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui"
    xmlns:composite = "http://java.sun.com/jsf/composite">
  
  <composite:interface> 
       <composite:attribute name="gravar"></composite:attribute>
<!--              <composite:attribute name="update"></composite:attribute> -->
  </composite:interface>
  <composite:implementation>	           			
	<p:toolbar>  
		    <p:toolbarGroup align="left">  
		        <p:commandButton  value="New" ajax="false"  icon="ui-icon-document" />  
		        <p:separator />  
		  
		        <p:commandButton  title="Gravar" ajax="false"  actionListener="#{gravar}" icon="ui-icon-disk"/>  
		        <p:commandButton  title="Delete" ajax="false"     icon="ui-icon-trash"/>  
		        <p:commandButton  title="Print" ajax="false" icon="ui-icon-print"/>  
    		</p:toolbarGroup>  
    </p:toolbar>
		
  </composite:implementation>
</ui:composition>
criei um componente desse cara e o chamo da seguinte forma de um cadastro
<mycomp:toolbarPadrao gravar="#{cidadeBean.gravar}"></mycomp:toolbarPadrao>
Exception :
SEVERE: JSF1073: javax.faces.event.AbortProcessingException caught during processing of INVOKE_APPLICATION 5 : UIComponent-ClientId=formPrincipal:formCadcidade:tabViewCidade, Message=/facelets/component/toolbarPadrao.xhtml @19,106 actionListener="#{gravar}": /facelets/cadastro/cadCidade.xhtml @31,63 gravar="#{cidadeBean.gravar}": Property 'gravar' not found on type br.com.sa.managedbean.CidadeManaged
Abr 12, 2012 6:23:57 PM com.sun.faces.context.ExceptionHandlerImpl log
SEVERE: /facelets/component/toolbarPadrao.xhtml @19,106 actionListener="#{gravar}": /facelets/cadastro/cadCidade.xhtml @31,63 gravar="#{cidadeBean.gravar}": Property 'gravar' not found on type br.com.saipherp.managedbean.CidadeManaged
javax.faces.event.AbortProcessingException: /facelets/component/toolbarPadrao.xhtml @19,106 actionListener="#{gravar}": /facelets/cadastro/cadCidade.xhtml @31,63 gravar="#{cidadeBean.gravar}": Property 'gravar' not found on type br.com.sa.managedbean.CidadeManaged

aparentemente nao reconhece como metodo.

Atenciosamente.

4 Respostas

A

Não sei se entendi muito bem o que você quer fazer, mas vamos lá:

1° você quer criar um toolbar que vai receber os dados da página acessada? Ex.:

cidades.jsf - vai gravar, apaga e imprimir dados de cidades cadastradas porém esses métodos são chamados no teu template
estados.jsf - gravar, apagar, imprimir
.
.
.
etc

é isso?

Caso seja, você pode configurar, ao carregar a página em escopo de request, uma variável identificadora comum, e ao clicar na ação gravar, apagar ou imprimir, ele ir no request e capturar esta variável e realizar as operações.

se não for isso, explica melhor aí kkkkk

RicardoYukito

É isso, mas nao queria fazer dessa forma.

Vou cria um Botao gravar, esse botao eu vou utiliza-lo em varios cadastros. a unica coisa é que quero passar como parametro para ele o ManagedBean e o Metodo que ele vai usar em cada cadastro.

Codigo do componente botao.
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui"
	xmlns:composite="http://java.sun.com/jsf/composite">

	<!-- INTERFACE -->
	<composite:interface>
		<composite:actionSource   name="actionListener" method-signature="void actionListener(javax.faces.event.ActionEvent)" targets="button"/>
	</composite:interface>
	<composite:implementation>
		<p:commandButton  title="Gravar" ajax="false"    icon="ui-icon-disk" id="button">
			<composite:insertChildren/>
		</p:commandButton>
	</composite:implementation>
	
</ui:composition>

Agora vou chamar esse botao no cadastro de Cidade.

<mycomp:botaoGravar actionListener="#{cidadeBean.getGravarTeste}"></mycomp:botaoGravar>

o metodo gravar no Mb cidade

public ActionListener getGravarTeste(ActionEvent evt){
		return new ActionListener() {
			@Override
			public void processAction(ActionEvent e) throws AbortProcessingException {
				System.out.println("TEste>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
			}
		};
	}

O problema agora é que nao da mais erro. Simplesmente nao passa pelo metodo getGravarTeste... estou fazendo alguma coisa errada no mapeamento ?

A

qual o escopo do teu managedbean?

RicardoYukito

@ManagedBean( name="cidadeBean") @ViewScoped public class CidadeManaged implements ManagedInterfacePadrao {

Criado 12 de abril de 2012
Ultima resposta 13 de abr. de 2012
Respostas 4
Participantes 2