[RESOLVIDO] Ajuda com Composite Component

1 resposta
L

Bom dia galera,
Gostaria de uma ajuda com o componente "Composite Component".
A dois dias tento fazer ele executar uma ação com actionListener mas não tenho obtido sucesso.
Segue abaixo o código e o erro para ver se facilita o entendimento do problema:

COMPONENT
<?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:cc="http://java.sun.com/jsf/composite"
	xmlns:p="http://primefaces.org/ui"
   	xmlns:h="http://java.sun.com/jsf/html"
   	xmlns:f="http://java.sun.com/jsf/core">

	<cc:interface>
	    <cc:attribute name="outputValue" required="true" />	
	    <cc:attribute name="outputStyleClass"/> 	     
	    <cc:attribute name="inputValue" required="true" />	   	 
	    <cc:attribute name="inputMaxlength"/>
	    <cc:attribute name="buttonId" required="true"/>
	    <cc:attribute name="buttonProcess" required="true" />	      
	    <cc:attribute name="buttonOncomplete" required="true" />	  
	    <cc:attribute name="buttonActionListener" method-signature="java.lang.String action()"/>	 
	    <cc:attribute name="buttonUpdate" required="true" />	  
	    <cc:attribute name="attributeName" required="true" />
	    <cc:attribute name="attributeValue" required="true" />	 
	</cc:interface>
	
 	<cc:implementation>
 		<h:form id="form">
		 	<h:outputText styleClass="#{outputStyleClass}" value="#{outputValue} "/>
			<h:panelGrid id="panel" columns="2">
				<p:inputText maxlength="#{inputMaxlength}" style="width:258px;" value="#{inputValue}" />
				<p:commandButton id="#{buttonId}" title="Pesquisar" image="ui-icon ui-icon-search" process="#{buttonProcess}" oncomplete="#{buttonOncomplete}" 
					actionListener="#{buttonActionListener}" update="#{buttonUpdate}" style="margin-left:10px">
					<f:attribute name="#{attributeName}" value="#{attributeValue}"/>
				</p:commandButton>
			</h:panelGrid>
		</h:form>
	 </cc:implementation>
</html>
ACTION NO BEAN
public void actionListenerListagemBairro(ActionEvent actionEvent) 
	{
		BairroListingController listing = new BairroListingController();
		Bairro query = (Bairro) actionEvent.getComponent().getAttributes().get("query");
		
		try
		{
			listing.setBairro((Bairro) query.clone());
		}
		catch(CloneNotSupportedException e)
		{
			e.printStackTrace();
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro!", e.getMessage()));
		}
		
		listing.actionListenerPesquisar(null);
	}
VIEW
...
<h:panelGrid id="panelBairroComunicante" columns="1">
							<dv:componentSearchView outputValue="Bairro" outputStyleClass="fieldRequired" inputValue="#{desaparecimentoPessoaController.desaparecimentoPessoa.comunicante.endereco.quadra.bairro.descricao}" inputMaxlength="30" buttonId="linkBairroComunicante"
             					buttonProcess="@parent" buttonOncomplete="dialogBairroComunicante.show();" buttonActionListener="#{desaparecimentoPessoaController.actionListenerListagemBairro}" buttonUpdate="form:listagemBairroComunicante" attributeName="query" 
             					attributeValue="#{desaparecimentoPessoaController.desaparecimentoPessoa.comunicante.endereco.quadra.bairro}"/>
						</h:panelGrid>
...
UTILIZO TAGLIB PARA ENDEREÇAR O COMPONENT:
...
 <tag>
    	<tag-name>bairroSearchView</tag-name>
    	<source>../global/views/components/pesquisa/bairroSearchView.xhtml</source>
    </tag>
...

ERRO

INFO: Server startup in 19014 ms
05/01/2012 12:46:17 javax.faces.event.MethodExpressionActionListener processAction
SEVERE: 'javax.el.PropertyNotFoundException' recebido ao invocar escuta de ação '#{buttonActionListener}' para o componente 'linkBairroComunicante'
05/01/2012 12:46:17 javax.faces.event.MethodExpressionActionListener processAction
SEVERE: javax.el.PropertyNotFoundException: /global/views/components/pesquisa/componentSearchView.xhtml @30,97 actionListener="#{buttonActionListener}": /external/views/desaparecido/desaparecimentoPessoa/desaparecimentoPessoaComunicanteInclude.xhtml @174,129 buttonActionListener="#{desaparecimentoPessoaController.actionListenerListagemBairro}": Property 'actionListenerListagemBairro' not found on type br.gov.to.ssp.delegaciavirtual.controller.DesaparecimentoPessoaController
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:104)
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:144)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:84)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:773)
at javax.faces.component.UICommand.broadcast(UICommand.java:296)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308 )
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:671)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:462)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:401)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329)
at org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:213)
at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:171)
at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:381)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108 )
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558 )
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118 )
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:282)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:357)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1687)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

05/01/2012 12:46:17 com.sun.faces.context.AjaxExceptionHandlerImpl log
SEVERE: JSF1073: javax.faces.event.AbortProcessingException obtido durante o processamento de INVOKE_APPLICATION 5: UIComponent-ClientId=form:form:linkBairroComunicante, Message=/global/views/components/pesquisa/componentSearchView.xhtml @30,97 actionListener="#{buttonActionListener}": /external/views/desaparecido/desaparecimentoPessoa/desaparecimentoPessoaComunicanteInclude.xhtml @174,129 buttonActionListener="#{desaparecimentoPessoaController.actionListenerListagemBairro}": Property 'actionListenerListagemBairro' not found on type br.gov.to.ssp.delegaciavirtual.controller.DesaparecimentoPessoaController
05/01/2012 12:46:17 com.sun.faces.context.AjaxExceptionHandlerImpl log

1 Resposta

L

Consegui resolver galera..
Estava cometendo dois erros.

O primeiro e mais grave era que eu criei o componente em uma pasta qualquer do meu sistema, e se faz necessario criar o mesmo na pasta resources na raiz.

A segunda modificação que eu fiz segue abaixo, foi realizada no component:

<?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:cc="http://java.sun.com/jsf/composite"
	xmlns:p="http://primefaces.org/ui"
   	xmlns:h="http://java.sun.com/jsf/html"
   	xmlns:f="http://java.sun.com/jsf/core">

	<cc:interface>
	    <cc:attribute name="outputValue" required="true" />	
	    <cc:attribute name="outputStyleClass"/> 	     
	    <cc:attribute name="inputValue" required="true" />	   	 
	    <cc:attribute name="inputMaxlength"/>
	    <cc:attribute name="buttonId" required="true"/>
	    <cc:attribute name="buttonProcess" required="true" />	      
	    <cc:attribute name="buttonOncomplete" required="true" />	  
	    <cc:attribute name="buttonActionListener" method-signature="void actionListener(javax.faces.event.ActionEvent)"/>	 
	    <cc:attribute name="buttonUpdate" required="true" />	  
	    <cc:attribute name="attributeName" required="true" />
	    <cc:attribute name="attributeValue" required="true" />	 
	</cc:interface>
	
 	<cc:implementation>
		 	<h:outputText styleClass="#{cc.attrs.outputStyleClass}" value="#{cc.attrs.outputValue} "/>
			<h:panelGrid id="panel" columns="2">
				<p:inputText maxlength="#{cc.attrs.inputMaxlength}" style="width:258px;" value="#{cc.attrs.inputValue}" />
				<p:commandButton id="#{cc.attrs.buttonId}" title="Pesquisar" image="ui-icon ui-icon-search" process="#{cc.attrs.buttonProcess}" oncomplete="#{cc.attrs.buttonOncomplete}" 
					actionListener="#{cc.attrs.buttonActionListener}" update="#{cc.attrs.buttonUpdate}" style="margin-left:10px">
					<f:ajax execute="@this" event="click">
						<f:attribute name="#{cc.attrs.attributeName}" value="#{cc.attrs.attributeValue}"/>
					</f:ajax>
				</p:commandButton>
			</h:panelGrid>
	 </cc:implementation>
</html>

Vlw

Criado 5 de janeiro de 2012
Ultima resposta 5 de jan. de 2012
Respostas 1
Participantes 1