Dúvida ao obter parametro de autocomplete

16 respostas
S

Olá pessoal, estou com uma dúvida, como obter o parâmetro deste autocomplete e utilizá-lo para passar para o commandLink abaixo e buscasse através deste método.

A ideia é que obtivesse o conteúdo deste autoComplete para passar para o método abaixo neste comandLink.

O commandLink obtém um valor e repassa para um método que retorna uma lista baseada em um nome, cujo gostaria de obter a partir do <p:autoComplete>.

Muito obrigado.

autocomplete:

&lt;div id="campos"&gt;
					&lt;p:autoComplete value="#{empresaBean.empresa.nome}" var="empresa"
						completeMethod="#{empresaBean.autocompleteEmpresa}"
						itemLabel="#{empresa.nome}" itemValue="#{empresa.nome}"
						converter="Converter"
						onkeyup="this.value = this.value.toUpperCase();" size="100"
						maxResults="5"&gt;
					&lt;/p:autoComplete&gt;
				&lt;/div&gt;

&lt;div id="botaopesq"&gt; &lt;p:commandLink actionListener="#{empresaBean.buscarPorNome}" title="Pesquisar" value="#{empresa.nome}" action="pesquisa"&gt; &lt;h:graphicImage library="images" name="botao.png" width="118" height="27" style="border:0" /&gt; &lt;f:setPropertyActionListener target="#{empresaBean.empresa}" value="#{empresa}" /&gt; &lt;/p:commandLink&gt;

16 Respostas

Rodrigo_Sasaki

Deixa eu ver se eu entendi direito, você está recebendo um valor no seu componente autoComplete, e quer usar esse valor no método invocado pelo commandButton?

S

Exatamente, quero obtero valor que eu digitar/clicar do <p:autocomplete> em um <commandLink>, sendo que no final, passá-lo para o ActionListener correspondente do commandLink.

Rodrigo_Sasaki

Mas esse valor já não está armazenado no seu model?

ele deveria ter sido atribuído à variável referenciada na EL do componente autoComplete, isso não ocorreu ?

S

Não, vem vazia após a seleção.

Rodrigo_Sasaki

O atributo nome dentro do atributo empresa dentro do seu bean não tem nada?

Se não tiver você precisa ver se seu converter está sendo invocado.

S

Vou debugar, mas a impressão é de nem passar pelo método.

S

Atributo nome está vazio, nem executa o hql no DAO.

Rodrigo_Sasaki

Seu autoComplete não está funcionando então ?

S

O autcomplete funciona normalmente.

S
Meu converter.
package com.portal.view;

import java.lang.reflect.Field;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import javax.persistence.Id;

@FacesConverter(value = &quot;Converter&quot;)
public class EntityConverter implements Converter {

	public Object getAsObject(FacesContext ctx, UIComponent component,
			String value) {
		System.out.println(&quot;ECV-GO&quot;);
		if (value != null) {
			return component.getAttributes().get(value);
		}
		return null;
	}

	public String getAsString(FacesContext ctx, UIComponent component,
			Object obj) {
		System.out.println(&quot;ECV-GS&quot;);
		if (obj != null && !&quot;&quot;.equals(obj)) {
			String id;
			try {
				id = this.getId(getClazz(ctx, component), obj);
				if (id == null) {
					id = &quot;&quot;;
				}
				id = id.trim();
				component.getAttributes().put(id,
						getClazz(ctx, component).cast(obj));
				return id;
			} catch (SecurityException e) {
				e.printStackTrace(); 
			} catch (IllegalArgumentException e) {
				e.printStackTrace(); 
			} catch (NoSuchFieldException e) {
				e.printStackTrace(); 
			} catch (IllegalAccessException e) {
				e.printStackTrace(); 
			}
		}
		return null;
	}

	private Class&lt;?&gt; getClazz(FacesContext facesContext, UIComponent component) {
		return component.getValueExpression(&quot;value&quot;).getType(
				facesContext.getELContext());
	}

	public String getId(Class&lt;?&gt; clazz, Object obj) throws SecurityException,
			NoSuchFieldException, IllegalArgumentException,
			IllegalAccessException {
		for (Field field : clazz.getDeclaredFields()) {
			if ((field.getAnnotation(Id.class)) != null) {
				Field privateField = clazz.getDeclaredField(field.getName());
				privateField.setAccessible(true);
				if (privateField.get(clazz.cast(obj)) != null) {
					return (String) field.getType()
							.cast(privateField.get(clazz.cast(obj))).toString();
				} else {
					return null;
				}
			}
		}
		return null;
	}
}
Rodrigo_Sasaki

ao executar o getAsObject, qual o valor retornado?

S

Vou por um breakpoint aki.

S

Não sei se está certo , mas :
org.primefaces.component.autocomplete.AutoComplete@f30883

Rodrigo_Sasaki

Pela sua EL, eu imagino que você quer recuperar a String do nome da Empresa, portanto não creio que esteja correto. Tente assim:public Object getAsObject(FacesContext ctx, UIComponent component, String value) { System.out.println("ECV-GO"); return value; } O normal seria buscar o Objeto Empresa, mas como você só usa o nome na EL, acho que isso resolve.

S

Funfou o que eu digito, mas não o que eu seleciono!!!.
brigadíssimo.

S

digaoneves, pode dar uma força agora?

Criado 14 de junho de 2012
Ultima resposta 25 de jun. de 2012
Respostas 16
Participantes 2