Problemas componente facelets

componente: modalPanel.xhtml

<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
	xmlns:s="http://jboss.com/products/seam/taglib"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:rich="http://richfaces.org/rich"
	xmlns:a4j="http://richfaces.org/a4j">

	<rich:modalPanel id="deleteUserPanel" autosized="true">
		<f:facet name="header">
			<h:panelGroup>
				<h:outputText value="Deletar registro" />
			</h:panelGroup>
		</f:facet>

		<f:facet name="controls">
			<h:panelGroup>
				<h:graphicImage value="/img/close.png" style="cursor:pointer"
					id="hideDeleteUserPanel" />
				<rich:componentControl for="deleteUserPanel"
					attachTo="hideDeleteUserPanel" operation="hide" event="onclick" />
			</h:panelGroup>
		</f:facet>

		<s:div id="userInfoToDelete" style="width:250px">
			<p>
				<h:graphicImage value="" />
				<h:outputText value="#{titulo}" />
				<h:outputText value="#{valor}" />
			</p>

			<h:form>
				<center>
					<h:commandButton value="Deletar" action="#{acao}" />
					<s:button onclick="Richfaces.hideModalPanel('deleteUserPanel')" value="Cancelar" />
				</center>
			</h:form>
		</s:div>
	</rich:modalPanel>
</ui:composition>

onde estou usando o componente:

<dem:modalPanel titulo="Deseja realmente excluir o sistema ?" valor="#{sistema.id}" acao="#{sistemaBean.excluirSistema()}"/>

metodo Managed Bean:

	@End
	public String excluirSistema() {
		log.info("Excluindo o sistema:" + sistemaSelecionado.getNome());
		sistemaSessionLocal.deleteSistema(sistemaSelecionado);  
		return "manterSistema";
	}

erro: (Ele entra no meu bean, e quando vai redirecionar para a página certa, dá esse erro)


11:29:01,572 SEVERE [application] javax.el.ELException: /WEB-INF/facelets/modalPanel.xhtml @36,58 action="#{acao}": Identity 'acao' does not reference a MethodExpression instance, returned type: java.lang.String
javax.faces.el.EvaluationException: javax.el.ELException: /WEB-INF/facelets/modalPanel.xhtml @36,58 action="#{acao}": Identity 'acao' does not reference a MethodExpression instance, returned type: java.lang.String
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)

PS: Se ao invés de passar o parâmetro da action do commandButton dentro do meu componente, ele funciona perfeitamente, mas como estou usando parâmetro pra action, ele dá esse erro. Não estou entendendo. Alguém já passou por esse problema ???

Agradecendo desde já,

Velho,

todo e qualquer ação (action) seja de uma commandButton, quanto de commandLink, deve ser um método public de um managed bean, que retorne uma String, que será uma regra de navegação ou não e que não possua argumentos. Por exemplo:

public String metodo(){ // Aqui você faz ou não alguma lógica. return "navigation_rule"; }

Portanto, revise o trecho de código abaixo:

<h:commandButton value="Deletar" action="#{acao}" />  

Taarrdeessss

Uma dúvida:

Esses parenteses no metodo da action funciona ?

Enfim, o seu modal está dentro de um form ? Se sim, tire-o de lá. rs. Já tive varios problemas com modais dentro de form. A regra basicamente é:
os modais devem ficar fora de qualquer form, e devem possuir seu próprio form interno, se necessário.

posta a página inteira ai … to achando que é algum reRender espertinho ai, que reconstroi sua view e nesse momento seu atributo ação está vazio …

[]'s

alex, segue em anexo a minha tela:


<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
	xmlns:s="http://jboss.com/products/seam/taglib"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:rich="http://richfaces.org/rich"
	xmlns:a4j="http://richfaces.org/a4j"
	template="/resources/template/default.xhtml"
	xmlns:dem="http://facelets.bb.com">

	<ui:define name="conteudo">
	
		<rich:panel header="Manter Sistema" switchType="client">

			<rich:spacer height="10"></rich:spacer>

			<a4j:keepAlive beanName="sistemaBean" ajaxOnly="false" />

			<rich:panel header="Filtro de Pesquisa" switchType="client">

				<a4j:form id="pesquisa_form">
					<h:panelGrid columns="4">
						<h:outputLabel value="Nome:" />
						<h:inputText value="#{argumentoPesquisa}" required="true"/>
						<a4j:commandButton action="#{sistemaBean.pesquisarSistema}"
							reRender="lista_form" value="Pesquisar"/>
						<a4j:commandButton action="#{sistemaBean.limparPesquisa}" value="Limpar" />	
					</h:panelGrid>
				</a4j:form>

			</rich:panel>

			<rich:spacer height="10"></rich:spacer>

			<rich:panel>

				<a4j:facet name="header">
					<h:outputText value="Resultado da Pesquisa" />
				</a4j:facet>

				<a4j:form id="lista_form" rendered="true">

					<rich:dataTable width="940px" id="sistemaList" value="#{sistemas}"
						rows="10" var="sistema" rendered="#{not empty sistemas}"
						styleClass="formatacaoDataTable"
						onRowDblClick="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
						onRowMouseUp="this.style.backgroundColor='#9C9C9C'" sortMode="single">

						<a4j:support event="onRowClick"
							actionListener="#{sistemaBean.selecionarSistema}" />

						<rich:column width="30%" sortBy="#{sistema.nome}">
							<f:facet name="header">
								<h:outputLabel value="NOME" />
							</f:facet>
							<h:outputText value="#{sistema.nome}" />
						</rich:column>
						<rich:column width="20%" sortBy="#{sistema.sigla}">
							<f:facet name="header">
								<h:outputLabel value="SIGLA" />
							</f:facet>
							<h:outputText value="#{sistema.sigla}" />
						</rich:column>
						<rich:column width="30%" sortBy="#{sistema.descricao}">
							<f:facet name="header">
								<h:outputLabel value="DESCRIÇÃO" />
							</f:facet>
							<h:outputText value="#{sistema.descricao}" />
						</rich:column>
						<rich:column width="10%" sortBy="#{sistema.dtInclusao}">
							<f:facet name="header">
								<h:outputLabel value="DATA INCLUSÃO" />
							</f:facet>
							<h:outputText value="#{sistema.dtInclusao}">
								<s:convertDateTime pattern="dd/MM/yyyy" />
							</h:outputText>
						</rich:column>
						<rich:column width="10%" sortBy="#{sistema.dtAlteracao}">
							<f:facet name="header">
								<h:outputLabel value="DATA ALTERAÇÃO" />
							</f:facet>
							<h:outputText value="#{sistema.dtAlteracao}">
								<s:convertDateTime pattern="dd/MM/yyyy" />
							</h:outputText>
						</rich:column>

					</rich:dataTable>

					<rich:datascroller for="sistemaList" maxPages="10" />

					<rich:spacer height="20" />

					<a4j:commandButton value="Cadastrar"
						action="#{sistemaBean.incluirSistema}" />
					<rich:spacer height="5" />

					<a4j:commandButton value="Editar"
						action="#{sistemaBean.editarSistema}" />
					<rich:spacer height="5" />

					<a4j:commandButton value="Excluir"
						action="#{sistemaBean.validaSelecaoExcluir}"
						oncomplete="Richfaces.showModalPanel('deleteUserPanel');"
						reRender="userInfoToDelete" />
						
					<a4j:commandButton value="Voltar" action="home" />	

				</a4j:form>

			</rich:panel>

			<dem:modalPanel titulo="Deseja realmente excluir o sistema ?" valor="#{sistema.id}" action="#{sistemaBean.excluirSistema()}" />
			
			<rich:spacer height="40" />

		</rich:panel>
	</ui:define>

</ui:composition>

Com relação ao parenteses no metodo excluir, tmb achei estranho, mas só assim q ele entra no Managed Bean.
ainda estou com o problema…
agradecendo pela atenção

Então cara, em um primeiro teste … eu tentaria o seguinte

dentro do seu modal, troque o <h:commandButtom> por

<a4j:commandButton ajaxSingle="true" limiteToList="true" value="Deletar" action="#{acao}" /> 

Obs. A nível de sugestão, se possível, remova todos os “rich:spacer” da sua app, pois ele é uma imagem e o JSF fica fazendo o download dessa imagem a cada atualizacao da tela. Tente utilizar CSS para ajustar seu layout.

[]'s

opa, tenta também adicionar um

oncomplete="Richfaces.hideModalPanel('deleteUserPanel');"

no botão