0

My class to convert

@Entity
@Table(name = "mv_uf")
@SequenceGenerator(name = "sq_mv_uf", sequenceName = "sq_mv_uf", allocationSize = 1)
public class UF implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sq_mv_uf")
    @Column(name = "id")
    private Long id;

    @Column(name = "sigla_uf")
    private String siglaUF;

    @Column(name = "nome_uf")
    private String nomeUF;

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((id == null) ? 0 : id.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }

        if (obj == null) {
            return false;
        }

        if (getClass() != obj.getClass()) {
            return false;
        }

        UF other = (UF) obj;

        if (id == null) {
            if (other.id != null) {
                return false;
            }
        } else if (!id.equals(other.id)) {
            return false;
        }

        return true;
    }
    //get and set
}

My converter

@FacesConverter(value = "ufConverter", forClass = UF.class)
public class UFConverter implements Converter {

    @EJB
    private UF uf;
    private MapaEleitoralBeanLocal mapaEleitoralBean;

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {

        if (value != null && !value.isEmpty()) {
            if (!isLong(value)) {
                return "";
            }

            Long id = Long.parseLong(value);
            uf = (UF) mapaEleitoralBean.consultarPorChavePrimaria(uf, id);
            return uf;

        } else {
            return null;
        }
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        if (value != null && !"".equals(value)) {
            uf = (UF) value;
            return String.valueOf(uf.getId());
        }
        return "";
    }

    private boolean isLong(String valor) {
        try {
            long i = Long.parseLong(valor);
            return true;
        } catch (Exception e) {
            return false;
        }
    }
}

My Bean

@Stateless
public class MapaEleitoralBean extends GenericDao implements MapaEleitoralBeanLocal {

    @Override
    public List<UF> listarTodosOsEstados() {
        StringBuilder sql = new StringBuilder();
        sql.append("SELECT o FROM ").append(UF.class.getSimpleName()).append(" o ");
        sql.append(" order by o.nomeUF");

        List<UF> listaDeTodosOsUF = new ArrayList<UF>();
        listaDeTodosOsUF = (List<UF>) consultarPorQuery(sql.toString(), 0, 0);

        if (listaDeTodosOsUF == null || listaDeTodosOsUF.isEmpty()) {
            return null;
        }

        return listaDeTodosOsUF;
    }

    @Override
    public List<Municipio> listarMunicipiosPorUF(UF uf) {

        StringBuilder sql = new StringBuilder();
        sql.append("SELECT o FROM ").append(Municipio.class.getSimpleName()).append(" o ");
        sql.append("WHERE o.siglaUF = '").append(uf.getSiglaUF()).append("' order by o.nomeMunicipio");

        List<Municipio> listaDeMunicipiosPorUF = new ArrayList<Municipio>();
        listaDeMunicipiosPorUF = (List<Municipio>) consultarPorQuery(sql.toString(), 0, 0);

        if (listaDeMunicipiosPorUF == null || listaDeMunicipiosPorUF.isEmpty()) {

            return null;
        }

        return listaDeMunicipiosPorUF;
    }
}

My ManagedBean

@ManagedBean(name = "mapaEleitoralControl")
@ViewScoped
public class MapaEleitoralControl {

    private static final long serialVersionUID = 1L;

    @EJB
    private MapaEleitoralBeanLocal mapaEleitoralBean;
    private List<UF> listaUF;
    private UF uf;

    public MapaEleitoralControl() {
        super();
    }

    @PostConstruct
    public void init() {
        listaUF = new ArrayList<UF>();
        listaUF = mapaEleitoralBean.listarTodosOsEstados();
        //mapaEleitoralBean.listarMunicipiosPorUF(uf);
        System.out.println("pare");

    }

    public void handleToggle(ToggleEvent event) {
        FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Toggled", "Visibility:" + event.getVisibility());
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }
    //get and sets
}

My xhtml

<p:column>
    <p:selectOneMenu id="selectUF"
                     style="width:195px"
                     value="#{mapaEleitoralControl.uf}"
                     converter="ufConverter" >

        <f:selectItem itemLabel="Selecione a UF
                      " itemValue=""
                      noSelectionOption="true" />

        <f:selectItem value="#{mapaEleitoralControl.listaUF}"
                      var="uf"
                      itemLabel="#{uf.nomeUF}"
                      itemValue="#{uf}" />
    </p:selectOneMenu>
</p:column>

I'm kinda new to JSF, PrimeFaces, EJB and other stuff, I'm getting this error and i have no idea why. I already look around Google and here and I can't find a solution.

00:47:57,662 WARN  [org.jboss.modules] (MSC service thread 1-6) Failed to define class br.com.maxvoto.converter.EntityConverter in Module "deployment.maxvoto-ear.ear.maxvoto-ejb.jar:main" from Service Module Loader: java.lang.LinkageError: Failed to link br/com/maxvoto/converter/EntityConverter (Module "deployment.maxvoto-ear.ear.maxvoto-ejb.jar:main" from Service Module Loader)
    at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:487) [jboss-modules.jar:1.3.3.Final-redhat-1]
    at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:277) [jboss-modules.jar:1.3.3.Final-redhat-1]
    at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:92) [jboss-modules.jar:1.3.3.Final-redhat-1]
    at org.jboss.modules.Module.load

ModuleClass(Module.java:568) [jboss-modules.jar:1.3.3.Final-redhat-1]
....
Tiny
  • 24,933
  • 92
  • 299
  • 571
Bruno Andrade
  • 243
  • 3
  • 7
  • 17
  • 1
    Any way you could narrow this down a bit? Have a read through this: http://stackoverflow.com/help/mcve – SiKing Dec 10 '14 at 04:21

1 Answers1

1

You should not use use @EJB annotation. Injection only works in managed beans. Get the target component using InitialContext. Alternative, making your converter as beans that can inject an EJB.

@ManagedBean
@RequestScoped
public class UFConverter implements Converter {
    @EJB
    private UF uf;
    // ...
}

JSF allow the container to inject references to container managed resources into a managed bean instance before it is made accessible to the JSF application. Only beans declared to be in request, session, or application scope are eligble for resource injection.

See also: How to inject @EJB, @PersistenceContext, @Inject, @Autowired, etc in @FacesConverter?

Community
  • 1
  • 1
wittakarn
  • 3,074
  • 1
  • 16
  • 30