Você já percebeu esse comportamento na maioria dos componentes do RichFaces? [RESOLVIDO]

Srs.
Notei que o rich:inplaceSelect e rich:picklist chamam mais de duas vezes o método do managed-bean para cada renderização! Sem contar a submissão!
Sendo assim, faço uns 4,5 selects desnecessariamente contando a renderização e submissão.

Alguma sugestão?? Devo estar errando em algo…

[]'s

Na submissão dá erro de validação… e isso só me acontece com esses componentes…
Ninguém teve essa esperiência com o richfaces??

[]'s

Pesquisando na cominudade JBoss, notei que o rich:inplaceSelect tem alguns bug’s… mudei para rich:combobox =D Não entra duas vezes no método que popula-o e é mais elegante!

Mais se alguém notou isso (acessar duas ou + vezes o método que popula o componente) e queira ajudar/discutir sobre tal assunto… será muito proveitoso!

[]'s

todos os componentes acontece isso tb… por exemplo o h:SelectOneMenu, tb passa algumas x no método getAlgumaCoisa()…
vc tem que tratar para não consultar várias x… nesse caso não é uma boa prática deixar a consulta dentro do método getAlgumaCoisa()…
entende?

alves.Felipe

Agradeço muito pela resposta! Agora entendi que é de fato um comportamente do componente.
Ainda não imaginei um jeito de fazer isso. Por exemplo, se eu tiver um List com os dados, em algum momento (para renderização do componente) terei que chamar esse método, e tendo em vista que quando ele é submetido faz o mesmo procedimento…

Se possível dê uma dica para que eu possa evitar (SELECT’S, JOIN’S) desnecessárias consultas.

Muito obrigado pela atenção!

[]'s

getLista()
{
     if(lista==null)
      {
               consulta()
      }
       return lista;
}

[quote=alves.Felipe] getLista() { if(lista==null) { consulta() } return lista; } [/quote]

Então… se eu tiver algo do tipo:

<td width="100%">
                                                    <rich:pickList value="#{beanOne.selected}"  //  beanOne -> private List<String> selected;
                                                                   copyAllControlLabel="Copiar todos" 
                                                                   copyControlLabel="Copiar"
                                                                   removeAllControlLabel="Remover todos"
                                                                   removeControlLabel="Remover"
                                                                   switchByClick="false" 
                                                                   sourceListWidth="250"
                                                                   targetListWidth="250">

                                                        <f:selectItems id="selectList" value="#{beanTwo.getList}" /> beanTwo -> preencherá minha lista de selectItem
                                                        
                                                        
                                                    </rich:pickList>
                                               //Para isso precisarei de um hidden certo??
                                              <h:inputHidden id="selectListHidden" value="#{beanTwo.selectList}" /> // beanTwo -> private List<SelectItem> selectList;
                                                </td>

Esse é meu cenário… estoura uma :

Cannot convert [javax.faces.model.SelectItem@1fddb33......

...of type class java.lang.String to interface java.util.List.

Por favor, como vc faria/faz alves.Felipe ??

Não quero fazer gambi :smiley:
Muito obrigado!

[]'s

me mostra como que esta o getList no seu bean…

Claro!!

	public List<SelectItem> getList() {
		
		try {
			
			if(this.selectList == null) { //Como vc me ensinou!
			
                          this.selectList = new ArrayList<SelectItem>();
			/// método para pegar do banco aqui 

				for(int i = 0; i < listaUserDao.size(); i++) {			
					
					this.selectList.add( new SelectItem( listaUserDao.get(i).getId(), listaUserDao.get(i).getName() ) );
					
				}

			}
			//
			return this.selectList;
			
		} catch(Exception e) {
			///..........
			return null;
		}
		
	}

Mas será que o problema ta aí??

Muito obrigado mesmo!

[]'s

Srs.
Deu certo!
Agora, se eu já tenho os dados para que vou fazer um (ainda que apenas um) SELECT quando o form for submetido atravéz do <h:commanButton> ???
Da para contornar isso? Ou melhor fazer assim mesmo?
Não sei criar Conversor para List… acho que precisa pegar o objeto atravéz do hash tendo em vista que na classe que implementa Converter ela vem como String :smiley:

Como vcs fazem? SELECT? Ou reaproveitam o que tem?

[]'s

cada vez que for submetido o form, ai refaz as consultas… normal…
só não é normal ficar refazendo várias vezes a mesma consulta quando esta reenderizando a tela… certo?!

Correto alves.Felipe !!
Muito obrigado pela força!

[]'s

[quote=neeryck]Srs.
Notei que o rich:inplaceSelect e rich:picklist chamam mais de duas vezes o método do managed-bean para cada renderização! Sem contar a submissão!
Sendo assim, faço uns 4,5 selects desnecessariamente contando a renderização e submissão.

Alguma sugestão?? Devo estar errando em algo…

[]'s
[/quote]

Srs, boa tarde, Tenho trabalhado num projeto com Richfaces e tivemos uns problemas parecidos: Um botão a4j:commandButton que, através do rerender, disparava a atualização de meu rich:dataTabel. Exatamente como falaram, o método getDataModel de meu managed bean era chamado várias vezes durante a renderização do dataTable.

Ainda estou buscando uma resposta consistente para este problema, mas utilizar os atributos ajaxSingle e process do meu a4j:commandButton fez com que o mesmo parasse de repetir a chamada ao getDataModel.

Acho que vale como histórico para o problema, quando outros colegas pesquisarem…

Abc
Darcio