Dúvida "simples" em JSF

2 respostas
C

Pessoal,

Minha dúvida JSF é simples.

Eu tenho um bean (cujo nome é crudHelperBean) com escopo session que é usado pelo arquivo crud.xhtml, conforme abaixo:

<a4j:outputPanel id="panelFerramentas" ajaxRendered="false">
	<a4j:form ajaxSubmit="true">			
		<rich:toolBar height="26" itemSeparator="line">
			<rich:toolBarGroup>
				<a4j:commandLink value="#{msgssisweb.botaoNovo}" action="#{crudHelperBean.novo}" reRender="panelFerramentas, panelConteudo" />
			</rich:toolBarGroup>

			<rich:toolBarGroup>
				<a4j:commandLink value="#{msgssisweb.botaoSalvar}" action="#{crudHelperBean.salvar}" reRender="panelFerramentas, panelConteudo" />
			</rich:toolBarGroup>

		</rich:toolBar>
	</a4j:form>
</a4j:outputPanel>

Agora o arquivo crud.xhtml é incluído em 2 outros arquivos diferentes, conforme abaixo:

Arquivo clientes.xhtml:

...
<a4j:include viewId="crud.xhtml" />
...

Arquivo produtos.xhtml:

...
<a4j:include viewId="crud.xhtml" />
...

Minha dúvida é a seguinte: Tem como o bean crudHelperBean saber de qual arquivo .xhtml ele foi invocado (produtos.xhtml ou clientes.xhtml)?

Em outras palavras, quando for chamado o método crudHelperBean.salvar(), eu gostaria que o meu bean soubesse se o salvar veio de clientes ou de produtos. Só que o maior problema, é que eu gostaria de usar um arquivo genérico que tenha o botão salvar, que é o crud.xhtml, que já foi listado.

Por favor, gostaria de sugestões,

Valew pessoal,

T+

Claudiney

2 Respostas

M

posta o codigo completo dessas tres paginas, e me diga em qual momento essas 2 paginas incluem o crud. Se eh por um evento, ou quando carrega.

C

Olá,

Bom, na verdade é na hora que carrega e quem faz o include é um template facelets (que eu suprimi no email anterior para facilitar o entendimento do meu problema). Mas lá vai o código:

Arquivo de template: crud_template.xhtml

<div xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br" 
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:t="http://myfaces.apache.org/tomahawk"      
      xmlns:rich="http://richfaces.ajax4jsf.org/rich"
      xmlns:a4j="https://ajax4jsf.dev.java.net/ajax"      
      >

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

	<ui:define name="body">

		<f:loadBundle basename="br/com/web/jsf/messages" var="msgssisweb"/>  	  

		<ui:insert name="formHeader">Form Header</ui:insert>

		<rich:tabPanel switchType="ajax">
			<rich:tab label="#{msgssisweb.crudTabCadastro}">
				<rich:panel styleClass="area" bodyClass="pad0">

					<a4j:include viewId="crud.xhtml" /> 
					<a4j:form ajaxSubmit="true">
						<a4j:outputPanel id="panelConteudo" ajaxRendered="false">

							<a4j:jsFunction name="salvar" action="#{crudHelperBean.salvar}" reRender="panelFerramentas, panelConteudo" />

							<ui:insert name="formConteudo">Form Conteudo</ui:insert>

						</a4j:outputPanel>
					</a4j:form>
				</rich:panel>
			</rich:tab>
			<rich:tab label="#{msgssisweb.crudTabLocalizar}">
			ok
			</rich:tab>
		</rich:tabPanel>

	  </ui:define>

</ui:composition>  

</div>

Um dos arquivos que usam este template (o outro é igual):

<!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" xml:lang="pt-br" 
  	  xmlns:jsp="http://java.sun.com/JSP/Page"
  	  xmlns:ui="http://java.sun.com/jsf/facelets"
  	  xmlns:h="http://java.sun.com/jsf/html"
  	  xmlns:f="http://java.sun.com/jsf/core"
  	  xmlns:c="http://java.sun.com/jstl/core"
  	  xmlns:t="http://myfaces.apache.org/tomahawk"      
  	  xmlns:rich="http://richfaces.org/rich"
  	  xmlns:a4j="http://richfaces.org/a4j"
	>
	
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<ui:composition template="../../templates/crud_template.xhtml">

  <ui:define name="title">
	<h:outputText value=" #{participanteBean.titulo} "/>  
  </ui:define>
  
  <ui:define name="formHeader">
  
	<f:loadBundle basename="br/com/web/jsf/messages_admin" var="msgsadmpart"/>  
  
	<h1>
		 <h:outputText value=" #{participanteBean.titulo} "/>
	</h1>  
  
  </ui:define>

  <ui:define name="formConteudo">
			
	<rich:tabPanel switchType="ajax">
		<rich:tab label="Geral">
			<h:outputText value="Nome Login" styleClass="bold" />:<h:outputText value=" "/><h:message for="nomeLogin" styleClass="msg_erro_detail"/><br />
			<h:inputText id="nomeLogin" value="#{participanteBean.objSelecionado.nomeLogin}" required="true" label="nome de login" style="width:180px;" reRender="panelConteudo">
				<f:validateLength minimum="3" maximum="64"/>
			</h:inputText>
		</rich:tab>
		<rich:tab label="Detalhes">
			<a4j:outputPanel id="panelDetalhes" ajaxRendered="false">
				<h:outputText value="Nome" styleClass="bold" />:<h:outputText value=" "/><h:message for="nome" styleClass="msg_erro_detail"/><br />
				<h:inputText id="nome" value="#{participanteBean.objSelecionado.usuarioDetalhes.nome}" required="true" label="nome" style="width:180px;">
					<f:validateLength minimum="3" maximum="64"/>
				</h:inputText>
			</a4j:outputPanel>
		</rich:tab>
	</rich:tabPanel>
				
  </ui:define>  
  
  <ui:define name="footerInfo">
  	<h:outputText value="(#{participanteBean.versao})" />
  </ui:define>
  
</ui:composition>  

</html>

Espero que este código ajude, obrigado :lol:

Criado 22 de janeiro de 2008
Ultima resposta 23 de jan. de 2008
Respostas 2
Participantes 2