Problemas com o rendered em um selectOneMenu[resolvido]

10 respostas
deadlock

tenho o seguinte trecho de codigo em uma pagina jsp:

<t:panelGroup colspan="3">
	<h:selectOneMenu id="item1" value="#{mEntrada.item}"
		rendered="#{mEntradaManager.mostrarItens}">
		<f:converter converterId="mItemConverter"/>
		<f:selectItems value="#{mItemManager.selectItens}"/>
	</h:selectOneMenu>
		
	<h:inputText id="item2" value="#{mEntrada.item}" maxlength="12"
		rendered="#{!mEntradaManager.mostrarItens}">
		<f:converter converterId="mItemConverter"/>
	</h:inputText>

	<h:commandButton value=" ? " action="#{mEntradaManager.mostrarListaItens}"/>
</t:panelGroup>

o problema eh o valor escolhido no selectOneMenu nunca é passado para o bean. qndo eu tiro a opção rendered funciona normalmente…

alguem como resolver isso???
p.s.: usando myfaces 1.1

10 Respostas

lidianycs

Uso esse atributo e funciona sempre, mas já tive problemas assim, se a condição dentro dele retornar false.
Vc já verificou se ele valor aí é true?

deadlock

lidianycs:
Uso esse atributo e funciona sempre, mas já tive problemas assim, se a condição dentro dele retornar false.
Vc já verificou se ele valor aí é true?

o problema não é propriamente com a condição do rendered, já q o select é gerado corretamente. o problema é q quando ele aparece, o valor selecionado nao é enviado para o bean. o atributo que deveria receber o valor sempre fica null.

bruno.leite

o seu #{mEntrada.item} é um selectItem?
posta o backingbean tb =)

deadlock

bruno.leite:
o seu #{mEntrada.item} é um selectItem?
posta o backingbean tb =)

import java.io.Serializable;
import java.util.Date;

public class MEntrada implements Serializable{
	
	private Integer id;
	private Date data = new Date();
	private String notaFiscal;
	private Double quantidadeRecebida;
	private Double valorUnitario;
	private MFornecedor fornecedor;
	private MItem item;
	private String tipo;
}

getters, setters, hashCode() e equals() estão implementados…

no ItemManager:

public List getSelectItens() {
		if (selectItens == null) {
			selectItens = new ArrayList<SelectItem>();
			
			List itens = itemDao.listarTodos();
			Iterator<MItem> it = itens.iterator();
			while (it.hasNext()) {
				MItem item = it.next();
				selectItens.add(new SelectItem(item, item.getNome()));
			}
		}
		
		return selectItens;
	}
public class ItemConverter implements Converter {

	/* (non-Javadoc)
	 * @see javax.faces.convert.Converter#getAsObject(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.String)
	 */
	public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2)
			throws ConverterException {
		
		MItem item = null;
		
		if (arg2 != null) {
			item = DaoFactory.getItemDao().buscarPorCodigoExtendido(arg2);
		}

		return item;
	}

	/* (non-Javadoc)
	 * @see javax.faces.convert.Converter#getAsString(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
	 */
	public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2)
			throws ConverterException {

		String cod = null;
		
		if (arg2 != null) {
			if (arg2 instanceof MItem) {
				MItem item = (MItem) arg2;
				cod = item.getCodigoExtendido();
			}
		}
		
		return cod;
	}

}
deadlock

pessoal… resolvi o problema… na verdade estava sendo vítima do “efeito borboleta”… (rsrsrsrs) por isso, acho q postar a solução aki seria dispensável, contudo se alguem fikr interessado na solução eh so deixar recado…
vlw e obrigado pela atenção…

CrazyFrogJava

cara posta o que vc fez com esse efeito borboleta… ninguem coloca a resposta sobre o assunto

deadlock

já faz algum tempo q tive esse problema… nem lembro mais pq chamei de “efeito borboleta”…

mas se nao me engano, a solução foi colocar um t:saveState para o atributo usado no rendered do selectOneMenu

CrazyFrogJava

cara eu tenho uma t:saveState mais mesmo assim ele não seta minhas variaveis no Bean

CrazyFrogJava

então abre o tópico novamente e quando resolver a pergunta sempre poste a resposta pra colocar o

CrazyFrogJava

então abre o tópico novamente e quando resolver a pergunta sempre poste a resposta pra colocar o RESOLVIDO

Criado 13 de agosto de 2008
Ultima resposta 11 de ago. de 2009
Respostas 10
Participantes 4