Rerender com immediate nao funciona bem

4 respostas
spranta

Pessoal, criei uma tela simples composta por um formulario de dados com um campo de descricao e uma tabela abaixo com todos os registros já cadastrados em BD. Quando clico sobre um destes registros a intenção é de que o formulario de dados seja preenchido com a descrição do respectivo item. No entanto, isso não acontece.
Aliás isso acontece perfeitamente desde que eu não coloque na tela as propriedades de validação.
Explicando melhor, o preenchimento do campo ‘descricao’ é obrigatório, portanto ele possui o atributo required=“true”, no entanto, se eu quero clicar sobre um item da tabela de registros para prencher tal formulario que contem o campo descricao, eu tenho de colocar no link deste item um immediate=true, para que a validação não recaia sobre o metodo ‘setForm’. Acontece que se eu coloco esse immediate=true, quando eu clico sobre o item ele até invoca a ação no meu ManagerBean, no entanto, ele não rerenderiza a area do formulario, eu consiguo renderizar outras areas, como a area da tabela de registros por exemplo, mas a area do formulario onde está o campo descricao que possui o required=true, ele nao renderiza depois de voltar da acao. Alguem sabe me dizer o porque que isso acontece e como resolver?
Lembrando que se eu tiro o immediate=true do link do item ele renderiza a area do formulario, no entanto, se eu nao colocar esse atributo ele sempre me exige que eu tenha no campo descricao algo preenchido, o que nao faz sentido, pois eu estou clicando no item da tabela de registros justamente para preencher o formulario de dados.

4 Respostas

spranta

Pessoal, alguem consegue me dar uma luz?
Vou colocar o meu codigo aqui pra ajudar melhor voces a entenderem o problema:

<?xml version="1.0" encoding="UTF-8"?>

<!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:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:a4j="http://richfaces.org/a4j"
	xmlns:rich="http://richfaces.org/rich">

	<ui:composition template="templates/master.xhtml">
		<ui:define name="informacoes">


			<f:view>

				<a4j:region id="reg_lst_tema">
					<a4j:outputPanel id="lst_tema">

						<h:messages showDetail="true" showSummary="false"></h:messages>
						<h:outputText value="Descricao: ">
						</h:outputText>
						<h:inputText id="descricao" value="#{tema.descricao}">
						</h:inputText>

								<a4j:commandLink actionListener="#{tema.setForm}"
									reRender="descricao" immediate="true" >
									<h:outputText value="SETAR FORM" />
									<a4j:actionparam name="pk" value="1" />
								</a4j:commandLink>
								
					</a4j:outputPanel>
				</a4j:region>

			</f:view>

		</ui:define>
	</ui:composition>

</html>

Eu simplifiquei a tela, de forma que coloquei um unico link ‘SETAR FORM’, se nele eu coloco o immediate=true como está ai, entao a requisicao vai na action, mas nao re-renderiza o input de descricao conforme eu desejo com o novo valor, no entanto, se eu retiro o immediate=true dai tudo funciona beleza.
Alguem sabe me ajudar nesta?

spranta

Pessoal, consegui em parte resolver o problema ao fazer com que o metodo setForm retornasse uma string mapeada para a pagina corrente, não sei porque, mas só dessa forma os componentes inputs da pagina conseguem ser renderizados tendo a ação (setForm) um immediate=“true”.
O problema é que agora, depois que a pagina volta, acontece o erro mais estranho que eu já vi em programação.
Todos os meus javascripts referenciados em tal tela, passam a assumir dinamicamente caracteres chineses, dai tudo fica bagunçado, até mesmo os javascripts gerados pelo framework (ajax4jsf) ficam com esse erro.
Quem me indica o erro é o Firebug que acredito muitos de voces devem utilizar também.
Nele vem o seguinte erro:
illegal character — meujavascript.js
[Break on this error] ⼯⁆畮漠牥獰潮珡癥氠灯爠獥瑡爠漠捡浰漠摥獣物漠捯洠漠癡汯爠捬楣慤漠湡⁴慢敬愠灡牡⁥摩漊੦畮捴楯渠敤楴慔敭愨楤ⱴ楴畬漩笊ऊॷ楮摯眮摯捵浥湴⹧整䕬敭敮瑂祉搨≦…

Alguem imagina o que pode ser, já perdi a paciencia pra fazer o tal setForm com o immediate true, não pode ser tal complicado assim.
Abraços a todos.

aguiar13

Cara, estou com o mesmo problema. Voce conseguiu alguma ajuda para resolver este erro ao carregar o JS?

Pra mim funciona beleza no IE mas no Firefox não!

[]s

Rafael

aguiar13

Consegui uma solução pro meu problema. Troquei na seção da minha página de

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

para

<meta http-equiv="Content-Type" content="text/xhtml; charset=UTF-8"/>

Se simplesmente remover o charset funciona também.

Espero ter ajudado!

[]s

Rafael

Criado 31 de outubro de 2007
Ultima resposta 18 de fev. de 2008
Respostas 4
Participantes 2