Problema com acesso em metodo usando o EntityHome do Jboss Seam

1 resposta
sudeval

Olá pessoal,
Não sei se vcs ja passaram por algo parecido, mas hoje eu tenho um projeto usando o Jboss Seam. (+ JBoss AS 4.2+ EJB + JSF)

E estou tendo um probleminha com a questao da minha pagina JSF acessar minha classe EntityHome no momento de acessar um metodo que eu criei. ( os metodos de EntityHome como persist, updated, remove… funcionam normalmente )

ex.:
minha pagina

... ( info antes)
<rich:panel>
            <f:facet name="header">Recurso</f:facet>    
            <s:decorate id="tipoRecursoDecoration" template="layout/edit.xhtml">
                <ui:define name="label">Tipo Recurso</ui:define>                
                <h:selectOneMenu id="tipoRecurso" value="#{recursoHome.instance.tipoRecurso}" required="true">
                		<s:selectItems 
                			value="#{tipoRecursoList.resultList}"
                			var="tipoRecurso" 
                			label="#{tipoRecurso.nome}"/>
                		<s:convertEntity/>
               		</h:selectOneMenu>
            </s:decorate>											
		            
            <s:decorate id="descricaoDecoration" template="layout/edit.xhtml">
                <ui:define name="label">Descrição</ui:define>
                <h:inputText value="#{recursoHome.instance.descricao}" required="true" id="text"/>
                <rich:suggestionbox id="suggestionBoxRecurso"
                	var="recurso"
                	for="text"
                	fetchValue="#{recursoHome.instance.descricao}"
                	suggestionAction="#{recursoHome.autocomplete}"
                	minChars="4"
                	height="50" 
               		width="250">
                	<h:column>
                    	<h:outputText value="#{recurso.descricao}" />
                	</h:column>                	
               	</rich:suggestionbox>
            </s:decorate>                                    	
            
            <div style="clear:both"/>            
        </rich:panel>
... (info depois )

minha classe RecursoHome

@Name("recursoHome")
public class RecursoHome extends EntityHome<Recurso> {
    
	private static final long serialVersionUID = 1L;
	
	@RequestParameter 
    Long recursoId;
    
    @Override
    public Object getId() 
    { 
        if (recursoId==null)
        {
            return super.getId();
        }
        else
        {
            return recursoId;
        }
    }
        
    @Override 
    @Begin(join=true)
    public void create() {
        super.create();
    }
    
    @SuppressWarnings("unchecked")
	public List<Recurso> autocomplete(Object text){
    	return getEntityManager().createQuery("select recurso from Recurso recurso " +
    			"WHERE recurso.descricao LIKE '%"+text+"%'").getResultList();
    }
}

Os metodos que existem em EntityHome e Home ( classes do Seam ), como o persist(), remove(), update() eu posso chamar normalmente na interface que ele executa tranquilo

<h:commandButton id="save" 
  value="Cadastrar"
  action="#{recursoHome.persist}"
  rendered="#{!recursoHome.managed}"/>

executam normalmente…

mas quando eu tento executar um metodo que eu adicionei

suggestionAction="#{recursoHome.autocomplete}"

como o autocomplete ele diz que nao encontrou o metodo (da o seguinte erro):

Exception during request processing:
Caused by javax.servlet.ServletException with message: "/recurso.xhtml @41,30 suggestionAction="#{recursoHome.autocomplete}": Method not found: [email removido](java.lang.Object)"

Alguem sabe me dizer o que pode ser ?

1 Resposta

lcegatti

O nome do seu método tem que ser:

public List<Recurso> getAutocomplete(Object text){ 
....

Ou da sua página vc tem que chamar o método da seguinte forma:

suggestionAction="#{recursoHome.autocomplete()}"

Se vc não colocar os parênteses ele vai procurar um atributo tentando acessar a propriedade getNomeAtributo.

vlww

Criado 8 de maio de 2008
Ultima resposta 15 de mai. de 2008
Respostas 1
Participantes 2