[RESOLVIDO]É possível que parâmetros de tags sejam variáveis em páginas JSF?

3 respostas
K

Olá amigos,
Minha duvida é a seguinte.
Tenho uma página de consulta que é utilizada em dois contextos diferentes.
Portanto, é interessante que haja apenas um código para esta página de consulta.
Vou postar o código e depois explicarei o meu problema exatamente. Segue um fragmento da minha página de consulta:

<c:if test="#{pacienteController.listaUnidadesAtendimento.rowCount != 0}">			
		<rich:dataTable value="#{pacienteController.listaUnidadesAtendimento}" var="UA" columnClasses="center" rows="6" reRender="ds">
         		<f:facet name="header">
				<h:outputText value="unidades de atendimento" />
			</f:facet>
			<rich:column sortBy="#{UA.nome}" styleClass="painelConsultaPacienteFormatatexto3">
				<f:facet name="header">
					<h:outputText value="Nome" />
				</f:facet>
				<h:outputText value="#{UA.nome}" />
			</rich:column>
			<rich:column sortBy="#{UA.ds}">
				<f:facet name="header">
					<h:outputText value="CNES" />
				</f:facet>
				<h:outputText value="#{UA.ds}" />
			</rich:column>
			<rich:column sortBy="#{UA.cidade}" styleClass="painelConsultaPacienteFormatatexto4">
				<f:facet name="header">
					<h:outputText value="Cidade" />
	        		</f:facet>
				<h:outputText value="#{UA.cidade}" />
			</rich:column>
			<rich:column sortBy="#{UA.bairro}">
				<f:facet name="header">
					<h:outputText value="Bairro" />
				</f:facet>
				<h:outputText value="#{UA.bairro}" />
			</rich:column>
			<rich:column>
				<f:facet name="header">
					<h:outputText value="" />
				</f:facet>
				<a4j:commandButton title="SELECIONAR" action="#{pacienteController.selecionaUA}" styleClass="btn_enviar5" />
			</rich:column>
			<f:facet name="footer">
				<rich:datascroller id="ds"></rich:datascroller>
			</f:facet>
		</rich:dataTable>
 	</c:if>

Esta página de consulta está no contexto da entidade PACIENTE.
Meu problema é o seguinte. Tenho exatamente a mesma estrutra para a entidade USUÁRIO.
A única diferença entre as páginas de consulta é que preciso que ao invés de chamar variáveis de “pacienteController”, irei chamar “usuárioController”.

Alguém tem uma idéia de como posso fazer isso?

Muito Obrigado.

3 Respostas

thales_biolck

cara, vc pode fazer da seguinte forma: (nao sei se é a melhor, mas acho q funciona)

<c:if test="#{faça seu teste pra saber se vai pegar o paciente}">

<jsp:useBean id=“variavel” class=“br.com.sua.Paciente”/>

</c:if>
<c:if test="#{faça seu teste pra saber se vai pegar o usuario}">

<jsp:useBean id=“variavel” class=“br.com.sua.Usuario”/>

</c:if>

esse teste pode ser um atributo de classe, tipo:
int teste = 0;
se teste for == 1, vai pra paciente, caso contrario vai para usuario

A partir daí, vc usa normal:

<rich:dataTable value="#{variavel.listaUnidadesAtendimento}" var=“UA” columnClasses=“center” rows=“6” reRender=“ds”>

<f:facet name=“header”>

…

…

…

</rich:dataTable>
K

Muito útil sua idéia thales.
Resolvi meu problema da seguinte forma, utilizei um bean para saber qual é a página atual e assim escolho qual é o controller que irei utilizar.
Implementei assim:

<c:if test="#{utilsController.paginaAtual == '/pages/user/cadPaciente.xhtml'}">
        <c:set var="controller" value="#{pacienteController}" scope="page"/>
</c:if>

<c:if test="#{utilsController.paginaAtual == '/pages/admin/cadUsuario.xhtml'}">
	<c:set var="controller" value="#{usuarioController}" scope="page"/>
</c:if>

Muito obrigado pela resposta, resolveu meu problema.

E

só para complementar, eu faço diferente. Por exemplo:

<ui:include src="/pessoa/criar.xhtml">
    <ui:param name="pessoaController" value="#{pacienteController}"/>
  </ui:include>


  <ui:include src="/pessoa/criar.xhtml">
    <ui:param name="pessoaController" value="#{usuarioController}"/>
  </ui:include>

E na página pessoa/criar.xhtml, uso o bean como #{pessoaController}

Misturar JSTL e Facelets costuma causar perda no desempenho.

Criado 8 de janeiro de 2012
Ultima resposta 8 de jan. de 2012
Respostas 3
Participantes 3