validator getasstring faces ejemplo attribute jsf java-ee dependency-injection cdi

jsf - getasstring - ¿Cómo puedo inyectar en @FacesConverter?



h selectonemenu converter (1)

Esta pregunta ya tiene una respuesta aquí:

Escribí un convertidor. Estoy usando CDI y inyección en paralelo. En ese caso, las clases no se inyectan. ¿Cómo puedo hacer la inyección posible?

@FacesConverter(forClass = MyClass.class) public class MyConverter implements Converter{ @EJB private ClassForEJB classForEJB; @Inject private ClassForInject classForInject; // Converter Methods }


El @FacesConverter no es un objetivo de inyección elegible. Reemplácelo por @ManagedBean o @Named . Como también le gustaría usar CDI, use @Named .

@Named @ApplicationScoped // I assume that your converter doesn''t have any state. public class MyConverter implements Converter { // ... }

Solo necesita cambiar la forma en que se ha referenciado en las vistas. Ya no puedes confiar en forClass . #{myConverter} especificarlo explícitamente como #{myConverter} .

<h:inputSomething ... converter="#{myConverter}" />

o

<h:inputSomething ...> <f:converter binding="#{myConverter}" /> </h:inputSomething>

Si realmente necesitas mantener el @FacesConverter a favor de forClass , entonces necesitarías tomar el EJB manualmente por JNDI. Un ejemplo concreto se muestra en este artículo de blog . Sin embargo, no puedo decir eso para los frijoles CDI.

Los chicos de JSF han confirmado esta vergonzosa supervisión y harán que @FacesConverter un objetivo de inyección elegible en el próximo JSF 2.2, ver también JSF spec issue 763 JSF 2.3.

Ver también:

Actualice si utiliza la biblioteca de utilidades JSF OmniFaces , o si está abierto a usarla, ya que su versión 1.6, al tener OmniFaces JAR en /WEB-INF/lib , todos los @FacesConverter (y @FacesValidator s) en su aplicación web automáticamente ser elegible para la inyección de CDI y EJB sin ningún esfuerzo adicional.