smnj
Junho 14, 2012, 1:01pm
#1
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:
<div id="campos">
<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">
</p:autoComplete>
</div>
<div id="botaopesq">
<p:commandLink actionListener="#{empresaBean.buscarPorNome}"
title="Pesquisar" value="#{empresa.nome}" action="pesquisa">
<h:graphicImage library="images" name="botao.png" width="118"
height="27" style="border:0" />
<f:setPropertyActionListener target="#{empresaBean.empresa}"
value="#{empresa}" />
</p:commandLink>
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?
smnj
Junho 14, 2012, 1:36pm
#3
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.
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 ?
smnj
Junho 14, 2012, 1:55pm
#5
Não, vem vazia após a seleção.
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.
smnj
Junho 14, 2012, 2:07pm
#7
Vou debugar, mas a impressão é de nem passar pelo método.
smnj
Junho 14, 2012, 2:09pm
#8
Atributo nome está vazio, nem executa o hql no DAO.
Seu autoComplete não está funcionando então ?
smnj
Junho 14, 2012, 2:12pm
#10
O autcomplete funciona normalmente.
smnj
Junho 14, 2012, 2:14pm
#11
Meu converter.
[code]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 = "Converter")
public class EntityConverter implements Converter {
public Object getAsObject(FacesContext ctx, UIComponent component,
String value) {
System.out.println("ECV-GO");
if (value != null) {
return component.getAttributes().get(value);
}
return null;
}
public String getAsString(FacesContext ctx, UIComponent component,
Object obj) {
System.out.println("ECV-GS");
if (obj != null && !"".equals(obj)) {
String id;
try {
id = this.getId(getClazz(ctx, component), obj);
if (id == null) {
id = "";
}
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<?> getClazz(FacesContext facesContext, UIComponent component) {
return component.getValueExpression("value").getType(
facesContext.getELContext());
}
public String getId(Class<?> 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;
}
}[/code]
ao executar o getAsObject , qual o valor retornado?
smnj
Junho 14, 2012, 2:20pm
#13
Vou por um breakpoint aki.
smnj
Junho 14, 2012, 2:24pm
#14
Não sei se está certo , mas :
org.primefaces.component.autocomplete.AutoComplete@f30883
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.
smnj
Junho 14, 2012, 2:37pm
#16
Funfou o que eu digito, mas não o que eu seleciono!!!.
brigadíssimo.
smnj
Junho 25, 2012, 12:39pm
#17
digaoneves, pode dar uma força agora?