Jboss Seam + JSF + RichFaces

9 respostas
ViniciusNaka

Boa tarde Galera.

Estou tentando exibir uma listagem de clientes, onde terá uma coluna “Projetos” com uma descrição dos projetos que esse cliente possui.
Ex:

Nome Projetos
XXX 1, 2, 3…

Segue abaixo o padrão que o pessoal usa aqui para listagem… isso dentro de um rich:dataTable

<rich:column width="200px">
							<f:facet name="header">
								<ui:include src="/layout/sort.xhtml">
									<ui:param name="entityList" value="#{tclientList}" />
									<ui:param name="propertyLabel" value="Nome" />
									<ui:param name="propertyPath" value="tclient.strNameClient"
										style="text-align: left;" />
								</ui:include>
							</f:facet>
							<h:outputText value="#{_tclient.strNameClient}" />
						</rich:column>
						<rich:column>
							<f:facet name="header">
								<ui:include src="/layout/sort.xhtml">		
									<ui:param name="entityList" value="#{tclientList}" />																
									<ui:param name="projectBussiness.tclient" value="#{_tclient}" />
									<ui:repeat var="project" value="#{projectBussiness.projetos}">										
										<ui:param name="propertyPath" value="project.strNameProject" />
									</ui:repeat>
								</ui:include>
							</f:facet>
						</rich:column>

O meu problema é que eu preciso enviar para o meu bean o id ou o obj cliente para buscar no banco os projetos e da forma que esta consta o seguinte erro:

Caused by: com.sun.facelets.tag.TagException: /paginas/cliente/cliente_lista.xhtml @74,72 ui:repeat Parent UIComponent was null

Como eu envio o id ou o obj cliente para o meu bean?

Desde já agradeço a ajuda.

Abs

9 Respostas

alias

Esse uso do ui:repeat tá meio bizarro…onde é que voce invoca o metodo do bean? Voce pode incluir como parametro do metodo as coisas que voce quer passar…

ViniciusNaka

então, estou começando a mexer/aprender sobre esses frameworks hehe…
o ui:repeat seria para varrer a lista de projetos que eu retorno do bean, que é chamado no value…

<ui:repeat var="project" value="#{projectBussiness.projetos}">										
										<ui:param name="propertyPath" value="project.strNameProject" />
									</ui:repeat>

Poderia dar um exemplo?

Abs

alias

Entao, o que retorna no value do dataTable? É uma lista dos objetos que voce quer receber no seu bean?

Se for apenas essa a necessidade, voce pode fazer da seguinte forma:

Supondo que sua datatable esteja assim:

<rich:datatable value="#{bean.listaDeObjetos}" var="objeto">
</rich:datatable>

Entao, no ponto em que voce incluirá a chamada para o metodo do bean, em um link por exemplo:

<h:commandLink action="#{bean.metodo(objeto)}" />

E pronto, seu objeto irá para o bean. :wink:

alan_pjr

Se entendi direito a sua necessidade, costumo fazer da seguinte forma:
No .xhtml:

&lt;s:link id="selecionar" action="#{suaAction.metodo}"&gt; &lt;h:graphicImage style="border-style: none;" value="/img/false.png" /&gt; &lt;f:param name="objetoId" value="#{obj.id}" /&gt; &lt;/s:link&gt;

Em “suaAction”, pego o valor usando um

@RequestParameter private Integer objetoId;

E uso o “objetoId” pra dar um “em.find” e recuperar o objeto a ser manipulado.

douglascst90

alan_pjr:
Se entendi direito a sua necessidade, costumo fazer da seguinte forma:
No .xhtml:

&lt;s:link id="selecionar" action="#{suaAction.metodo}"&gt; &lt;h:graphicImage style="border-style: none;" value="/img/false.png" /&gt; &lt;f:param name="objetoId" value="#{obj.id}" /&gt; &lt;/s:link&gt;

Em “suaAction”, pego o valor usando um

@RequestParameter private Integer objetoId;

E uso o “objetoId” pra dar um “em.find” e recuperar o objeto a ser manipulado.

ViniciusNaka

alias…
o q retorna no meu dataTable é uma lista de clientes e eu gostaria de receber no meu bean “Projeto” o cliente para buscar no banco os projetos do cliente recebido.
Tentei fazer do jeito q vcs sugeriram, mas sempre da erro referente a tag :frowning:

Caused by: com.sun.facelets.tag.TagException: /paginas/cliente/cliente_lista.xhtml @76,78 <s:link> Parent UIComponent was null

Tem como eu passar o obj ou id do cliente sem ser link, button, etc…
Ex:
dessa forma

<ui:param name="projeto.cliente" value="#{cliente}" />

ou dessa…

<ui:param name="#{projeto.cliente}" value="#{cliente}" />

nao estao funcionando :frowning:

ah e depois de retornado os projetos eu gostaria de settar no maximo 3 deles na coluna da listagem de clientes, por isso q eu coloquei o ui:repeat.
Tem como eu fazer isso com o ui:repeat ou com alguma outra tag? se não der tento usar o <c:forEach> mesmo.

abs

alias

Cara, ainda nao entendi o seu requisitoisa passar esses parametros para o bean em algum momento, correto? Não entendi onde ou quando voce vai tentar passar esses valores… todas as alternativas que os colegas postaram eu vejo como válidas.

ViniciusNaka

desculpe, acho que não fui claro na minha dúvida…
eu quero passar um objeto ou id de um “cliente” para um atributo do meu bean “projeto”…

@In
private Tclient tClient; // getters e setters

ah, pra deixar claro, no começo da listagem eu já tenho acesso aos objetos clientes através do rich:dataTable

<rich:dataTable id="tclientList" width="650px" var="_tclient"
						value="#{tclientList.resultList}"
						rendered="#{not empty tclientList.resultList}" rows="15"
						style="text-align: center;">

depois de receber no bean eu chamaria no ui:repeat ou <c:forEach>…

<ui:repeat var="project" value="#{projectBussiness.projetos}">										
	<h:outputText value="#{project.strNameProject}" />
</ui:repeat>									
									
<c:forEach var="project" items="#{projectBussiness.projetos}">											
	<h:outputText value="#{project.strNameProject}" />
</c:forEach>

…o método que retorna uma lista de projetos do cliente settado no “tClient”.

public List<Tproject> getProjetos(){
		int fkIdClient = tClient.getIdClient();
		List<Tproject> projetos = new ArrayList<Tproject>();		
		Query qr = entityManager.createQuery("from Tproject where FKidClient :fkIdClient");		
		return projetos qr.getResultList();		
	}

espero ter sido claro.

obrigado.

abs

alias

Voce que ir no bean buscar os dados dos “projetos” a cada linha da tabela, é isso?

Se for o caso, porque já nao inclui no seu objeto “cliente” uma lista preenchida dos “projetos”? Seria bem mais simples do que ir no bean buscar os dados a cada iteração da tabela.

Criado 20 de setembro de 2011
Ultima resposta 22 de set. de 2011
Respostas 9
Participantes 4