[Resolvido]Problema com <rich:pickList> via ajax [JSF]

2 respostas
malokas

Estou com o seguinte problema, tenho um pickList que a lista é bem grande, em cima do componente do pickList fiz uma busca em auto complete. E eu quero que quando selecionar o campo de cima ele insira na lista do lado direito do pickList e remova da lista do lado esquerdo. O problema é que esta removendo da lista do lado esquerdo mas não está renderizando no lado direito. Mas o objeto está sendo adicionado na lista, criei uma tabela para testar e atualizei ela junto com o pickList e o elemento aparece na tabela e não no pickList. To achando que o problema é na renderização do componente.

Aqui é a pagina

<rich:suggestionbox id="agenciaInput" height="200" width="280" suggestionAction="#{superintendenciaBean.autoCompleteAgencia}" 
								var="agencia" for="agenciasInput" fetchValue="#{agencia.nome}" tokens="," >
						<h:column>
							<h:outputText value="#{agencia.numero}" />
						</h:column>
						<h:column>
							<h:outputText value="#{agencia.nome}" />
						</h:column>
	
						<a4j:support status="loading" ajaxSingle="true" event="onselect" action="#{superintendenciaBean.addAgencia(agencia)}" reRender="pickListAgencia,tableTeste"/>
					</rich:suggestionbox>

					<rich:pickList id="pickListAgencia" converter="converters.SimpleEntityConverter" sourceListWidth="260px" targetListWidth="260px" 
			      		listsHeight="200px" value="#{superintendenciaBean.superintendencia.agencias}" copyControlLabel="#{msg['commons.adicionar']}" removeControlLabel="#{msg['commons.remover']}">
			      		<c:forEach items="#{superintendenciaBean.listAgencias}" var="agencia">
			      			<f:selectItem itemValue="#{agencia}" itemLabel="[#{agencia.numero}] #{agencia.nome}"/>
			      		</c:forEach>
			      	</rich:pickList>

Aqui está meu ManagedBean, o objeto está chegando corretamente e sendo adicionado na lista. Mas na hora do reRender não aparece na lista do lado direito.

public void addAgencia(Agencia agencia){
		superintendencia.getAgencias().add(agencia);
		listAgencias.remove(agencia);
	}

Já tentei tirar o ajaxSingle e colocar dentro de uma região mas também não deu certo.
Alguém tem alguma ideia?

2 Respostas

M

rich:suggestion e rich:pickList estão no mesmo nível.

Divida-as em rich:panel diferentes e mande re-renderizar o id do panel.

malokas

Resolvi da seguinte forma. Ao invez de escolher na sugestão la em cima, a medida que o usuario vai digitando vai logo atualizando a lista de baixo.
Ai o usuario clica e passa pro outro lado normalmente.

Agora ta assim na pagina

<rich:suggestionbox id="agenciaInput" height="0" width="0" suggestionAction="#{superintendenciaBean.autoCompleteAgencia}" reRender="pickListAgencia" 
										var="agencia" for="agenciasInput">
					</rich:suggestionbox>

					<rich:pickList id="pickListAgencia" converter="converters.SimpleEntityConverter" sourceListWidth="260px" targetListWidth="260px" 
			      		listsHeight="200px" value="#{superintendenciaBean.superintendencia.agencias}" copyAllControlLabel="#{msg['commons.adicionarTodos']}" copyControlLabel="#{msg['commons.adicionar']}" 
			      	 	removeAllControlLabel="#{msg['commons.removerTodos']}"	removeControlLabel="#{msg['commons.remover']}">
			      		<c:forEach items="#{superintendenciaBean.listAgencias}" var="agencia">
			      			<f:selectItem itemValue="#{agencia}" itemLabel="[#{agencia.numero}] #{agencia.nome}"/>
			      		</c:forEach>
			      	</rich:pickList>

e o método

public void autoCompleteAgencia(Object event) {
		String escolha = event.toString().toLowerCase();
		listAgencias = agenciaService.findByNomeAndEstado(escolha,superintendencia.getEndereco().getEstado());
	}
Criado 21 de junho de 2011
Ultima resposta 21 de jun. de 2011
Respostas 2
Participantes 2