EJB não funciona no Convert?

3 respostas
K

Bem Pessoal,

Estou utilizando o componente listShuttle que necessita de um convert. Onde o mesmo tem fazer um pesquisa no banco, não estou conseguindo pois o ejb fica fica nulo, estive lendo nos foruns o EJB tem limitações no Convert, não sei de confere esta informação.

.xhtml

<rich:listShuttle

sourceListWidth=“350” targetListWidth=“350” id="descricaoCriterio"

sourceCaptionLabel="Itens Registrados"

targetCaptionLabel="ItensSelecionados"

copyAllControlLabel="Copiar Todos"

copyControlLabel=“Copiar"

sourceValue=”#{bean.descricacaoCriterios}“

targetValue=”#{bean.descricacaoCriterioSelecionados}“

var=“item"

converter=“ListShuttlePedidoRenovacaoMatriculaConverter”

>

<a>rich:column</a>

<f:facet name=“teste”></f:facet>

<h:outputText value=”#{item.descricao}” />

</rich:column>
</rich:listShuttle>

Convert

public class ListShuttlePedidoRenovacaoMatriculaConverter implements Converter {

@EJB
private IManterDescricaoCriterioClassificacaoEJB ejb;

	public  ListShuttlePedidoRenovacaoMatriculaConverter(){
			
	}

public Object getAsObject(FacesContext facesContext, UIComponent uIComponent, String valorTela) {  
      
              if (valorTela == null)
    	              return null;  
              
   	  
              Long id = new Long(valorTela);
              System.out.println("Getasobject >>> Lista Target -->" + id); 
    	      DescricaoCriterioClassificacao descricaoCriterioClassificacao = new DescricaoCriterioClassificacao();
    	         try {
					descricaoCriterioClassificacao = *ejb*.consultarPorId(id);
				} catch (NegocioException e) {
					e.printStackTrace();
				}  
	
				System.out.println("descricao" + descricaoCriterioClassificacao.getDescricao()); 
    	        return descricaoCriterioClassificacao;       

  }  

  public String getAsString(FacesContext facesContext, UIComponent uIComponent, Object objetoTela) {  
	  
	  HtmlListShuttle tmp = (HtmlListShuttle) uIComponent; 
	  
	  Object tList = tmp.getTargetValue();
	  Object sList = tmp.getSourceValue();

	  System.out.println("String de busca-->" + sList);
	  System.out.println("Lista Target -->" + tList); 
	  
	  
   	  DescricaoCriterioClassificacao descricaoCriterioClassificacao = (DescricaoCriterioClassificacao) objetoTela;  
      return descricaoCriterioClassificacao.getId().toString();   
         
  }

}

faces-config-app.xml

"<converter>
	<converter-id>ListShuttlePedidoRenovacaoMatriculaConverter</converter-id>
	<converter-class>org.sigaept.edu.web.converter.ListShuttlePedidoRenovacaoMatriculaConverter</converter-class>
</converter>"

Gostaria somente de fazer um busca no metodo getAsObject();

3 Respostas

H

Ola Karbruno,

Tem certeza que essa consulta retorna alguma coisa?

tente colocar um catch(Exception ex){ /* tratativa */} para ver se não está dando nenhum erro e debuge o metodo para ver se ele não retorna null.

PS. tente usa as tags [ code ][ / code] para ficar mais visivel seu código:

.xhtml
<rich:listShuttle
sourceListWidth="350" targetListWidth="350" id="descricaoCriterio"
sourceCaptionLabel="Itens Registrados"
targetCaptionLabel="ItensSelecionados"
copyAllControlLabel="Copiar Todos"
copyControlLabel="Copiar"
sourceValue="#{bean.descricacaoCriterios}"
targetValue="#{bean.descricacaoCriterioSelecionados}"
var="item"
converter="ListShuttlePedidoRenovacaoMatriculaConverter"
>
<rich:column>
<f:facet name="teste"></f:facet>
<h:outputText value="#{item.descricao}" />
</rich:column>

</rich:listShuttle>
Convert

public class ListShuttlePedidoRenovacaoMatriculaConverter implements Converter {

@EJB
private IManterDescricaoCriterioClassificacaoEJB ejb;

public ListShuttlePedidoRenovacaoMatriculaConverter(){

}

public Object getAsObject(FacesContext facesContext, UIComponent uIComponent, String valorTela) {

if (valorTela == null)
return null;


Long id = new Long(valorTela);
System.out.println("Getasobject >>> Lista Target -->" + id);
DescricaoCriterioClassificacao descricaoCriterioClassificacao = new DescricaoCriterioClassificacao();
try {
descricaoCriterioClassificacao = *ejb*.consultarPorId(id);
} catch (NegocioException e) {
e.printStackTrace();
}

System.out.println("descricao" + descricaoCriterioClassificacao.getDescricao());
return descricaoCriterioClassificacao;

}

public String getAsString(FacesContext facesContext, UIComponent uIComponent, Object objetoTela) {

HtmlListShuttle tmp = (HtmlListShuttle) uIComponent;

Object tList = tmp.getTargetValue();
Object sList = tmp.getSourceValue();

System.out.println("String de busca-->" + sList);
System.out.println("Lista Target -->" + tList);


DescricaoCriterioClassificacao descricaoCriterioClassificacao = (DescricaoCriterioClassificacao) objetoTela;
return descricaoCriterioClassificacao.getId().toString();

}
}


*faces-config-app.xml*

"<converter>
<converter-id>ListShuttlePedidoRenovacaoMatriculaConverter</converter-id>
<converter-class>org.sigaept.edu.web.converter.ListShuttlePedidoRenovacaoMatriculaConverter</converter-class>
</converter>"
Masami

Conseguiu resolver?!?

estou com o mesmo problema… =(

Masami

Mudei meu codigo e agora o problema não é mais o EJB ficar nulo, mas na hora do deploy não é localidado o EJB.

Erro apresentado pelo Glassfish:
GRAVE: Unresolved <ejb-link>: #MedicaoReferenciaFacade
GRAVE: Exception while deploying the app
java.lang.RuntimeException: Error: Unresolved <ejb-link>: #MedicaoReferenciaFacade
        at com.sun.enterprise.deployment.util.EjbBundleValidator.accept(EjbBundleValidator.java:691)
        at com.sun.enterprise.deployment.WebBundleDescriptor.visit(WebBundleDescriptor.java:1975)
        at com.sun.enterprise.deployment.Application.visit(Application.java:1756)
        at com.sun.enterprise.deployment.archivist.ApplicationFactory.openArchive(ApplicationFactory.java:177)
        at org.glassfish.javaee.core.deployment.DolProvider.load(DolProvider.java:162)
        at org.glassfish.javaee.core.deployment.DolProvider.load(DolProvider.java:79)
        at com.sun.enterprise.v3.server.ApplicationLifecycle.loadDeployer(ApplicationLifecycle.java:612)
        at com.sun.enterprise.v3.server.ApplicationLifecycle.setupContainerInfos(ApplicationLifecycle.java:554)
        at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:262)
        at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:183)
        at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:272)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:305)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:320)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1176)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$900(CommandRunnerImpl.java:83)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1235)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1224)
        at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:365)
        at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:204)
        at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:166)
        at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:100)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:245)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
        at java.lang.Thread.run(Thread.java:662)
meu converter:
import boundary.MedicaoReferenciaFacade;
import entities.MedicaoReferencia;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import javax.faces.convert.FacesConverter;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

@FacesConverter(value = "converterMedicaoReferencia", forClass = MedicaoReferencia.class)
public class MedicaoReferenciaConverter implements Converter {
    MedicaoReferenciaFacade medicaoReferenciaFacade = lookupMedicaoReferenciaFacadeBean();
    
    @Override
    public Object getAsObject(FacesContext context, UIComponent componente, String value) {

        try {
            if (value == null || value.equalsIgnoreCase("-1"))
                return null;
            int id = Integer.parseInt(value);
            return medicaoReferenciaFacade.find(id);
        }
        catch (NumberFormatException ne) {
            throw new ConverterException("Não foi possível converter (" + value + ") para MediçãoReferencia: não é um número inteiro.", ne);
        }
        catch (IllegalArgumentException e){
            throw new ConverterException("Não foi possível converter (" + value + ") para MediçãoReferencia: identificador desconhecido.", e);
        }
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        if (value == null) {
            return null;
        }
        if (value instanceof MedicaoReferencia) {
            MedicaoReferencia aux = (MedicaoReferencia) value;
            return aux.getCodMedicaoReferencia().toString();
        } else if (value instanceof String && ((String) value).equalsIgnoreCase("-1")) {
            return "-1";
        } else {
            throw new ConverterException("(" + value.getClass() + ") não é uma instância.");
        }
    }

    private MedicaoReferenciaFacade lookupMedicaoReferenciaFacadeBean() {
        try {
            Context c = new InitialContext();
            return (MedicaoReferenciaFacade) c.lookup("java:global/gsmApp/MedicaoReferenciaFacade!boundary.MedicaoReferenciaFacade");
            //return (MedicaoReferenciaFacade) c.lookup(MedicaoReferenciaFacade.class.getName())
        } catch (NamingException ne) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", ne);
            throw new RuntimeException(ne);
        }
    }        
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <context-param>
        <param-name>primefaces.THEME</param-name>
        <param-value>none</param-value>
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>60</session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.xhtml</welcome-file>
    </welcome-file-list>
    <filter>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
    </filter-mapping>
    <error-page>
        <exception-type>javax.faces.application.ViewExpiredException</exception-type>
        <location>/erros/sessao-expirada.xhtml</location>
    </error-page>
    <ejb-local-ref>
        <ejb-ref-name>MedicaoReferenciaFacade</ejb-ref-name>
        <ejb-ref-type>Session</ejb-ref-type>
        <ejb-link>#MedicaoReferenciaFacade</ejb-link>
    </ejb-local-ref>
</web-app>

tentei varias coisas para funcionar, mas não tive sorte... =(

Criado 26 de janeiro de 2011
Ultima resposta 13 de mar. de 2011
Respostas 3
Participantes 3