Problemas com ListShuttle

10 respostas
dahenz

Bom dia…

Estou utilizando um listShuttle para um formulário de agrupamento, portanto, funciona muito bem até que eu faça uma requisição ajax na tela.

Qualquer requisição ajax aparece o seguinte erro:

[color=red]has invalid value expression [/color]

Alguém passou por isso?

Obrigado…

10 Respostas

k1tsune

Você implementou o converter?

Abraço

dahenz

Daí K1tsune!!

Implementei sim..... estou mandando o código pra você dar uma olhada!!!

public class EmpresaConverter implements Converter {
		
	@Override
	public Object getAsObject(FacesContext facesContext, UIComponent uIComponent, String valorTela) {
		// TODO Auto-generated method stub
		
		if (valorTela == null){
			
			return null;
			
		}
		
		EmpresaDAO empresaDAO = new EmpresaDAO();
		Long id = new Long(valorTela);
		return empresaDAO.getEmpresa(id);
		
	}

	@Override
	public String getAsString(FacesContext facesContext, UIComponent uIComponent, Object objetoTela) {
		// TODO Auto-generated method stub
		
		if (objetoTela==null){
			
			return null;
			
		}
		
		if (objetoTela instanceof EmpresaBean){
			
			EmpresaBean empresaBean = (EmpresaBean) objetoTela;
			return empresaBean.getId().toString(); 
			
		} else {
		
			throw new IllegalArgumentException("object:" + objetoTela + "of type:" + objetoTela.getClass().getName());
			
		}		 	
	}
}
k1tsune

Fala dahenz.

Seu converter parece estar ok. Colocou ele no xml, né? Creio que sim, senão daria erro por não ter encontrado.

Pode postar o código do seu listshuttle? Esse componente é problemático. Aqui tive muitos problemas com ele, por exemplo os dados não aparecerem, mesmo que no bean esteja tudo correto. Tentei muitas coisas pra consertar, nem dando reRender no componente. Depois descobri que existe esse problema mas ainda não foi corrigido.

Pode postar o código do listShuttle, por gentileza? Esses bugs que acontecem com ele são cabulosos, mas tentarei achar algo, ahahaa!

Abraço

dahenz

Mudei a conversão de objeto para String desta forma:

public Object getAsObject(FacesContext facesContext, UIComponent uIComponent, String valorTela) {
		// TODO Auto-generated method stub
		
		if (valorTela == null){
			
			return null;
			
		}
		
[color=red]		EmpresaDAO empresaDAO = new EmpresaDAO();
		Long id = new Long(valorTela);
		EmpresaBean empresaBean = empresaDAO.getEmpresa(id);
		return empresaBean.getId().toString();[/color]
		
	}

	@Override
	public String getAsString(FacesContext facesContext, UIComponent uIComponent, Object objetoTela) {
		// TODO Auto-generated method stub
		
		if (objetoTela==null){
			
			return null;
			
		}
		
		if (objetoTela instanceof EmpresaBean){
			
			EmpresaBean empresaBean = (EmpresaBean) objetoTela;
			return empresaBean.getId().toString(); 
			
		} else {
		
			throw new IllegalArgumentException("object:" + objetoTela + "of type:" + objetoTela.getClass().getName());
			
		}		 	
	}

Agora me apresenta esse erro:

"Component frmMetaVigencia:lsEmpresas has invalid value expression 0"

Afinal, o listShuttle deve ser definido para valores do tipo String?? Apenas??? Se for, por que continua esse erro.....

Obrigado a todos pela ajuda....

k1tsune

Olá

Creio que seu primeiro converter está correto.

Coloque o código jsp por gentileza. Não consegui perceber nada ainda, as vezes o jsp ajuda.

Abraço

dahenz

Abaixo está a confecção do listShuttle.....

<center>
 					    <rich:listShuttle id                  = "lsEmpresas" 	
	 					    			  converter           = "EmpresaConverter"				    				  
					   	 				  showButtonLabels    = "false"
					   					  sourceCaptionLabel  = ".::Empresas disponíveis"
					   					  sourceListWidth     = "245"			   		
					   					  targetCaptionLabel  = ".::Empresas selecionadas"
					   					  targetListWidth     = "245"			  			                    
					                      listsHeight         = "250"
					                      sourceValue         = "#{MetaVigenciaMB.empresas}"
					                      targetValue         = "#{MetaVigenciaMB.empresasSelecionadas}"
					                      var                 = "empresas" >
					   						   				
					   		<rich:column>
					   		   <h:outputText value="#{empresas.id}" />
					   		</rich:column>
					   						   								   						   			
					   		<rich:column>
					   		   <h:outputText value="#{empresas.descricao}" />
					   		</rich:column>

					    </rich:listShuttle>            						
				  	 </center>
dahenz

Estou utilizando duas colunas para o listShuttle…

Uma para o id, e outra para a descrição da empresa…

Valew K1tsune

k1tsune

dahenz,

Olhando o código não consegui encontrar nada de errado. O que eu sugiro é debugar o momento de construção da lista e os métodos do converter, ao menos pra tentar isolar o problema. Tente também tirar a coluna com a ID, ver o que rola. Como eu disse, não é sua solução, mas pra tentar isolar o problema :smiley:

Abraço

dahenz

Pois é… eu tenho feito isso… mas acho que é bug mesmo…

Vou tentar achar outras formas… Acho que vou fazer um modelo agrupamento utilizando dois scrollableDataTable mesmo…

Obrigado pela ajuda K1tsune…

[]s

W

Pessoal, estou desenvolvendo um sisteminha aqui na empresa utilizando jboss Seam, e preciso fazer o seguinte:

1 - Existe uma classe chamada Fluxo que possui relacionamento com outra classe chamada ItemFluxo, preciso desenvolver uma tela
onde o usuário selecione um fluxo no dropdownlist e abaixo monte um rich:listShuttle com os itens associados e não associados deste fluxo,
estes itens associados ficam em uma terceira tabela tb_Fluxo_Item_Fluxo que foi gerada automaticamente pelo Hibernate atraves de relacionamento
@ManyToMany. Estou com dificuldades em desenvolver esta funcionalidade uma vez que nunca trabalhei com seam e o uso de rich faces é um pouco
recente para mim.

Caso alguém possa me dar um help, pode me mandar email [email removido].

abraço.

Criado 22 de abril de 2009
Ultima resposta 19 de nov. de 2010
Respostas 10
Participantes 3