Problema com ciclo de vida JSF

2 respostas
wagner.gs
Pessoal, já não sei mais o que fazer tenho o seguinte código:
<a4j:form id="formFase" ajaxSubmit="true" reRender="codigo, descricao">
			<table>
				<tr>
					<td>Fase</td>
				</tr>
				<tr>
					<td>
					<table id="valores">
						<tr>						

							<td><h:outputText value="Cadastro de Fases"/></td>
							<td> <h:selectOneMenu id="codigo" value="#{faseController.fase.codigo}" title="Código" converter="faseConverter">								
									<a4j:support event="onchange" actionListener="#{faseController.tipoAlterado}" ajaxSingle="true" reRender="descricao" immediate="true"/>
								 	<f:selectItems value="#{faseController.fasesDisponiveis}"/>
								 </h:selectOneMenu>
							</td> 
						</tr>
						<tr>
							<td>Fase:</td>
							<td><h:inputText value="#{faseController.fase.descricao}" id="descricao" title="Descrição" required="true"/>
							</td>
						</tr>						

					</table>
					<table id="botoes">
	<tr>
		<td><a4j:commandButton value="Inserir" action="#{faseController.inserir}"/>
		</td>
		<td><a4j:commandButton value="Alterar" action="#{faseController.alterar}"/>
		</td>
		<td><a4j:commandButton value="Excluir" action="#{faseController.excluir}"/>
		</td>
		<td><a4j:commandButton value="Limpar" action="#{faseController.limpar}" type="reset"/>
		</td>
	</tr>
</table>
					</td>
				</tr>
			</table>
		</a4j:form>
	</ui:define>
Antes de chamar o onchange o Inserir funciona, depois do onchange, nada mais funciona, a mensagem de erro é essa:
05/05/2008 23:14:25 com.sun.faces.lifecycle.RenderResponsePhase execute
INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=formFase:codigo[severity=(ERROR 2), summary=(formFase:codigo: Validation Error: Value is not valid), detail=(formFase:codigo: Validation Error: Value is not valid)]
O método tipoAlterado, é chamado normalmente, e tem o seguinte código:
public void tipoAlterado(ActionEvent ev) {
		FacesContext context = FacesContext.getCurrentInstance();
		Map<String, String> requestParams = context.getExternalContext()
				.getRequestParameterMap();
		Integer id = Integer.valueOf(requestParams.get("formFase:codigo"));
		this.fase = factory.buildFase().getById(id);
	}

Não tenho idéia de onde possa estar o problema. Se tiver outra forma de fazer isso, mesmo que sem ajax, gostaria de saber.

Obrigado a todos.

2 Respostas

wagner.gs

Pessoal,
Percebi que se colocar immediate = true nos botões ele envia sem a mensagem de erro, mas não envia corretamente.
Fiz o teste pegando a informação como um parametro e me veio a informação atual, mas o objeto que mantem a requisição vem com as informações antigas.
Sei que é algum erro meu durante o ciclo de vida, mas nao consigo identificar onde.

Abraços.

Alkamavo

usa o debbug para ver o k andas a passar la pra dentro das variaveis…

Criado 5 de maio de 2008
Ultima resposta 6 de mai. de 2008
Respostas 2
Participantes 2