[Resolvido] f:ajax render não funciona pro campo

6 respostas
B
Minha tela:
<?xml version="1.0" encoding="iso-8859-1" ?>
<!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"
	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:p="http://primefaces.org/ui"
	xmlns:c="http://java.sun.com/jsp/jstl/core">

<ui:composition template="/_template.xhtml">
	<ui:define name="corpo">
		<div class="...">
			<div class="...">
				<h:form id="form">
					<table>
						<c:forEach items="#{mBean.lista}" var="objeto" >
							<tr>
								<td>
									<h:selectBooleanCheckbox value="#{objeto.marcado}">
										<f:ajax render=":form:valor#{objeto.id} :form:lbValor#{objeto.id}" />
									</h:selectBooleanCheckbox>
								</td>
								<td>
									<h:outputLabel value="#{objeto.desc}" />
								</td>
								<td>
									<h:outputLabel id="lbValor#{objeto.id}" value="Valor:" rendered="#{objeto.marcado}" />
								</td>
								<td>
									<p:inputText id="valor#{objeto.id}" rendered="#{objeto.marcado}" value="#{objeto.valor}" />
								</td>
							</tr>
						</c:forEach>
					</table>
				</h:form>
			</div>
		</div>
	</ui:define>
</ui:composition>
</html>

Estou tentando fazer aparecer o input "valor" usando ajax no checkbox. Assim que ele for selecionado, o campo deverá aparecer, mas não estou com muita sorte.

Os valores passados à view são confiáveis, a única falha que enxergo é a falta de update do campo.

Idéias?

EDIT: Código atualizado.

6 Respostas

H

<f:ajax render=“form:valor#{objeto.id}” />
Hein?! O.o

bem, não entendi oq seria o form:valor#{objeto.id} estando esse comando certo, tente com p:ajax

C

Ao inves de render=“form:valor#{objeto.id}” de um id para o campo em questao e passa o id do campo no rendered

G

Olá bruno_7317,

Não testei para ver se é o caso, mas quando uso o primefaces é bom dar preferencia para os componentes só dele, ou seja, tanto o ajax como o booleancheckbox use o p:
Certa vez não funcionava um f:ajax meu e quando troquei funcionou.

B

jakefrog:
<f:ajax render=“form:valor#{objeto.id}” />
Hein?! O.o

Essa linha diz que é para renderizar o componente com o id igual a “valor + o id do objeto vindo do mBean”, ou seja, o input mais abaixo:

<p:inputText id="valor#{objeto.id}" rendered="#{objeto.marcado}" value="#{objeto.valor}" />

Por exemplo:
Suponha que você tem um objeto com id = 2, desc = “objeto2”, o id do input será “valor2”.

Ah, sim, trocar por <p:ajax /> não adiantou.

Não sei se ficou claro, mas o input em questão faz parte de uma lista, daí o porquê dele receber um id dinâmico.
Setar o um id estático para o campo fará com que todos os inputs da lista tenham o mesmo id.

gustavo_l_walker:
Olá bruno_7317,

Não testei para ver se é o caso, mas quando uso o primefaces é bom dar preferencia para os componentes só dele, ou seja, tanto o ajax como o booleancheckbox use o p:
Certa vez não funcionava um f:ajax meu e quando troquei funcionou.

Ainda nada.

B

Informações adicionais:
Se eu uso <f:ajax render="@form" /> o campo aparece, mas todos os outros valores que digitei são apagados.

Obs.: Alterei o código para ficar igual ao que eu estou usando atualmente. Em suma, transformei o <p:panelGrid> numa

.

EDIT:
jakefrog, mesmo não tendo me dado a resposta diretamente, foi através do seu blog que consegui descobrir a causa do meu problema:
“[…] toda vez que um objeto não é exibido e você deseja exibi-lo é necessário atualizar todo seu container.” - http://uaihebert.com/?p=669

B

–Post Duplo–

Criado 20 de julho de 2012
Ultima resposta 24 de jul. de 2012
Respostas 6
Participantes 4