Ajuda com jsf e xhtml + condições para cada linha do rich:datatable (Resolvido)

8 respostas
Jacomete
<rich:dataTable id="pedidoList" rows="30"
				rendered="#{not empty pedidoController.pedidoList}"
				onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
				onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
				value="#{pedidoController.pedidoList}" var="pedido">

				<f:facet name="header">
					<h:outputText value="Listagem de Pedidos Vendedor" />
				</f:facet>

				<rich:column sortBy="#{pedido.cdPedidoVendedor}">
					<f:facet name="header">
						<h:outputText value="Cd.Pedido.V" styleClass="headerText" />
					</f:facet>
					<h:outputText value="#{pedido.cdPedidoVendedor}" />
				</rich:column>

				<rich:column sortBy="#{pedido.dtEmissPedv}">
					<f:facet name="header">
						<h:outputText value="Dt.Emissão" styleClass="headerText" />
					</f:facet>
					<h:outputText value="#{pedido.dtEmissPedv}">
						<f:convertDateTime pattern="dd/MM/yyyy" />
					</h:outputText>
				</rich:column>

				<rich:column sortBy="#{pedido.cliente.rzSocialEmitente}">
					<f:facet name="header">
						<h:outputText value="Razão Social" styleClass="headerText" />
					</f:facet>
					<h:outputText value="#{pedido.cliente.rzSocialEmitente}" />
				</rich:column>

				<rich:column sortBy="#{pedido.moeda.dsMoeda}">
					<f:facet name="header">
						<h:outputText value="Moeda" styleClass="headerText" />
					</f:facet>
					<h:outputText value="#{pedido.moeda.dsMoeda}" />
				</rich:column>

				<rich:column sortBy="#{pedido.vlPedidov}" style="text-align:right;">
					<f:facet name="header">
						<h:outputText value="Valor Pedido" styleClass="headerText" />
					</f:facet>
					<h:outputText value="#{pedido.vlPedidov}">
						<f:convertNumber pattern="###,###,##0.00" type="currency"
							maxFractionDigits="2" />
					</h:outputText>
				</rich:column>

				<rich:column headerClass="table-opcoes"
					styleClass="celula_opcoes opcoes-edita">
					<f:facet name="header">
						<h:outputText value="Editar" styleClass="headerText" />
					</f:facet>
					<a4j:commandLink actionListener="#{pedidoController.editar}"
						action="pedido" id="editarlink" value="Editar">
						<f:attribute name="pedido" value="#{pedido}" />
					</a4j:commandLink>
					<rich:toolTip for="editarlink" value="Editar"/>
				</rich:column>

				<rich:column headerClass="table-opcoes"
					styleClass="celula_opcoes opcoes-deleta">
					<f:facet name="header">
						<h:outputText value="Remover" styleClass="headerText" />
					</f:facet>

					<a4j:commandLink ajaxSingle="true" id="deletarlink" value="Remover"
						oncomplete="#{rich:component('deletarPanel')}.show()"
						reRender="deletarPanel">
						<f:setPropertyActionListener value="#{pedido}"
							target="#{pedidoController.pedidoVenda}" />
					</a4j:commandLink>
					<rich:toolTip for="deletarlink" value="Deletar"/>
				</rich:column>

				<rich:column headerClass="table-opcoes"
					styleClass="celula_opcoes opcoes-consulta">
					<f:facet name="header">
						<h:outputText value="Opções" styleClass="headerText" />
					</f:facet>
					<h:commandLink actionListener="#{pedidoController.consultar}"
						action="consulta" id="consultarlink" value="Consultar">
						<f:attribute name="pedido" value="#{pedido}" />
					</h:commandLink>
					<rich:toolTip for="consultarlink" value="Consultar" />
				</rich:column>

				<f:facet name="footer">
					<rich:datascroller id="scroller" align="center" for="pedidoList"
						renderIfSinglePage="false" fastControls="hide" maxPages="20"
						rendered="#{not empty pedidoController.pedidoList}">

						<f:facet name="first">
							<h:outputText value="Primeira Página"
								style="white-space: nowrap;" />
						</f:facet>

						<f:facet name="first_disabled">
							<h:outputText value="Primeira Página"
								style="white-space: nowrap;" />
						</f:facet>

						<f:facet name="previous">
							<h:outputText value="Anterior " />
						</f:facet>

						<f:facet name="previous_disabled">
							<h:outputText value="Anterior " />
						</f:facet>

						<f:facet name="next">
							<h:outputText value=" Próximo" />
						</f:facet>

						<f:facet name="next_disabled">
							<h:outputText value=" Próximo" />
						</f:facet>

						<f:facet name="last">
							<h:outputText value="Última Página" style="white-space: nowrap;" />
						</f:facet>

						<f:facet name="last_disabled">
							<h:outputText value="Última Página" style="white-space: nowrap;" />
						</f:facet>

					</rich:datascroller>

				</f:facet>

			</rich:dataTable>

tenho essa tabela que me lista os pedidos de um determinado usuario que esta logado, porem este usuario tem acesso a mais de uma area de venda, exemplo: o usuario fulano pode ver pedidos das areas de vendas 0101, 0102 e 0103, da area 0101 ele pode alterar e excluir os pedidos, da area 0102 ele soh pode consultar, e da area 0103 ele soh pode alterar.

eu queria habilitar e desabilitar os link de cada opção(alterar/excluir/consultar) de cada linha da tabela. Se fosse uma condição soh usaria o rendered, pensei em criar um metodo para fazer isso e colocar no rendered, mas não sei como passar a linha da tabela para esse metodo.

alguma ideia???

8 Respostas

aluisiodsv

Vc pode passar a linha atual para um método assim:

&lt;a4j:commandLink actionListener="#{pedidoController.editar}" action="pedido" id="editarlink" value="Editar" rendered="#{pedidoController.renderiza(pedido)}"&gt;
  &lt;f:attribute name="pedido" value="#{pedido}" /&gt;
&lt;/a4j:commandLink&gt;

e no bean cria um método que receba um objeto do tipo pedido como parâmetro e retorne um boolean, true se for mostrar ou false se não for.

Uma questão: action=“pedido” pra q isso ?

Jacomete

pelo q eu vi o rendered não funciona com metodo passando parametro.

rendered="#{pedidoController.renderiza(pedido)}"

action=“pedido” eh a pagina que será carregada para alteração do pedido, na verdade poderia ter colocado ja dentro do metodo editar

aluisiodsv

ahh tahh … está usando jsf 2 neh !

mas era pro rendered funcionar sim … muito estranho.

Qual a condição, mais especificamente, para poder fazer cada ação ? As vezes dá pra montar uma EL.

Jacomete

if ((pedido.boImportado == ‘N’) && (pedido.areaVenda.altera == ‘S’) && (pedido.areaVenda.deletar == ‘S’)) {
}

será que assim ficaria bom:

rendered="#{pedido.boImportado eq ‘N’ ? true :
pedido.areaVenda.alterar eq ‘S’ ? true :
pedido.areaVenda.deletar eq ‘S’ ? true :false}"

aluisiodsv

Como tem botões diferentes … em cada botão vc coloca um rendered

&lt;a4j:commandLink actionListener="#{pedidoController.editar}" action="pedido" id="editarlink" value="Editar" rendered="#{pedido.areaVenda.alterar eq 'S' ? true : false}"&gt;
  &lt;f:attribute name="pedido" value="#{pedido}" /&gt;
&lt;/a4j:commandLink&gt;

e assim com os outros botões.

Jacomete

blz vou tentar e aviso…

valeu a ajuda

aluisiodsv

Opa, tranquiloo…

Jacomete

valeu pela ajuda aluisiodsv…

Criado 24 de janeiro de 2011
Ultima resposta 28 de jan. de 2011
Respostas 8
Participantes 2