JSF não popula atributos do MBean quando usado o atributo rendered!

3 respostas
thiago.correa

O "pobrema" é o seguinte:

Estava fazendo um CRUD em casa quando eu me deparei com uma situação um tanto capiciosa, quando eu utilizo o atributo rendered do componente para mostrá-lo ou não na tela ele não popula o atributo do meu MBean, se eu retirar esse "controle" ele funciona normalmente sem maiores problemas.

Ele só funciona quando o MBean está no escopo session (o que eu quero evitar)

Estou utilizando o Myfaces 1.1.6 e o tomcat 5.0, vou tentar atualizar a versão do Myfaces para ver se é um Bug
Seguem os "fontes"

import java.util.Random;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;


public class TesteMBean {

	private Integer id;
	private String text;	

	public String getText() {
		return text;
	}
	public void setText(String text) {
		this.text = text;
	}
	public String save() {		
		id = new Random().nextInt();
		return null;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}	
}
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<f:view>
	<h:form>
		<h:outputText value="id" rendered="#{testeMBean.id != null}"></h:outputText>
		<h:inputText value="#{testeMBean.id}" 
			rendered="#{testeMBean.id != null}" />
		<br />
		<h:inputText value="#{testeMBean.text}" />
		<h:commandButton action="#{testeMBean.save}" />
	</h:form>
</f:view>
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE faces-config PUBLIC
    "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
    "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">

<faces-config>
	<managed-bean>
		<managed-bean-name>testeMBean</managed-bean-name>
		<managed-bean-class>TesteMBean</managed-bean-class>
		<managed-bean-scope>request</managed-bean-scope>
	</managed-bean>
</faces-config>

3 Respostas

thiago.correa

só mais um detalhe, me lembrei que em casa utilizando o tomcat 6 e a versão 1.2.x o Myfaces ocorre o mesmo cenário!

rponte

Nono mau hábito,
http://www.tarsobessa.com/blog/?p=9

:slight_smile:

Em vez de usar session, tente usar algum componente de escopo conversacional maior que resquest e menor que session.
Como o componente t:saveState do Tomahawk.

Abraços e boa sorte.

thiago.correa

Opa Rafael, eu não estou usando escopo de sessão, só mencionei que se usar sessão aí eu tenho o comportamento esperado, e estou evintando usar componentes como o t:stateSave e o keepAlive para evitar ficar atrelado a um “fornecedor”

Mas estou vendo qie não vou fugir disso!

Criado 9 de outubro de 2009
Ultima resposta 12 de out. de 2009
Respostas 3
Participantes 2