EntityManager ist immer NULL

Hallo,

Ich habe einen Validator in dem ich überprüfen will ob ein Objekt mit dem gleichen Namen bereits exisitiert. Dazu muss ich eine DB Abfrage mit Hibernate/JPA machen. Bisher habe ich auf CategoryEM zugegriffen und das mit Contains überprüft. Jetzt ist allerdings CategoryEM immer NULL und ich kann mir überhaupt nicht erklären warum. Der Validator sieht so aus:

@FacesValidator("Get.Validator.CategoryValidator")
public class CategoryValidator implements Validator {

    @Override
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {

        FacesMessage msg;

        if (!(value instanceof String)) {
            throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, String.valueOf(value.getClass()), null));
        }

        Category category = new Category((String) value);

        if (CategoryEM != null) {


            if (this.CategoryEM.findAll().contains(category)) {

                msg = new FacesMessage(Utility.getApplication().evaluateExpressionGet(
                        FacesContext.getCurrentInstance(), "#{msg['category.error.exists']}", String.class));

                msg.setSeverity(FacesMessage.SEVERITY_ERROR);

                throw new ValidatorException(msg);
            }
        }




    }
    @EJB
    private CategoryFacadeLocal CategoryEM;

    /**
     * Get the value of CategoryEM
     *
     * @return the value of CategoryEM
     */
    public CategoryFacadeLocal getCategoryEM() {
        return CategoryEM;
    }

    /**
     * Set the value of CategoryEM
     *
     * @param CategoryEM new value of CategoryEM
     */
    public void setCategoryEM(CategoryFacadeLocal CategoryEM) {
        this.CategoryEM = CategoryEM;
    }
@Local
public interface CategoryFacadeLocal {

    void create(Category category);

    void edit(Category category);

    void remove(Category category);

    Category find(Object id);

    List<Category> findAll();

    List<Category> findRange(int[] range);

    int count();
    
}

Von Netbeans generierte Klasse:

@Stateless
public class CategoryFacade extends AbstractFacade<Category> implements CategoryFacadeLocal {
    @PersistenceContext(unitName = "wie-koche-ichPU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public CategoryFacade() {
        super(Category.class);
    }
    
}

Ich habe auch schon probiert den Typ von CategoryEM von CategoryFacadeLocal auf CategoryFacade ab zu ändern, jedoch ist das Objekt immer NULL.

Kann mir jemand sagen was ich falsch mache?

Probiere mal @Inject statt @EJB. Ich glaube, EJBs werden in JSF-Validatoren nicht out-of-the-box unterstützt.

soweit ich weiß geht das erst ab JSF 2.3. Hier ein Workaround von BalusC:

Einfach den FacesValidator mit @Named oder @ManagedBean annotieren, Validator Interface implementieren und dann kannst du dein EJB injecten.

oder halt per JNDI laden.

Der Aufruf in der XHTML wird dann wie im Link gemacht.

Hallo,

danke für die Antworten. Mit dieser Lösung funktioniert es http://balusc.blogspot.co.at/2011/09/communication-in-jsf-20.html#GettingAnEJBInFacesConverterAndFacesValidator

OFFTopic

Kann es sein, dass hotmail Emailadresse fürs Registrieren nicht funktionieren? Habe mich registriert und keine Email erhalten. Admin habe ich auch schon angeschrieben.

[QUOTE=Unregistriert]OFFTopic

Kann es sein, dass hotmail Emailadresse fürs Registrieren nicht funktionieren? Habe mich registriert und keine Email erhalten. Admin habe ich auch schon angeschrieben.[/QUOTE]

Hat sich erledigt :slight_smile: