[ 
https://issues.jboss.org/browse/SEAMFACES-82?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Brian Leathem resolved SEAMFACES-82.
------------------------------------

    Resolution: Done


Fixed in WELD-846

> Injection in faces Converters broken
> ------------------------------------
>
>                 Key: SEAMFACES-82
>                 URL: https://issues.jboss.org/browse/SEAMFACES-82
>             Project: Seam Faces
>          Issue Type: Bug
>          Components: CDI Integration
>    Affects Versions: 3.0.0.Beta2
>         Environment: jboss AS 6 final, windows, war deployment
>            Reporter: yangju
>            Assignee: Brian Leathem
>            Priority: Critical
>
> I have a big war with seam 3 faces, persistence, internationalization, xml 
> config, solder modules in the web-inf/lib.
> I have tried to inject managed beans into the jsf converter, but it does not 
> matter it is my own bean or seam's bean or weld's bean, the bean is always 
> null. It seems that the injection fails silently. The converter code is as 
> follows:
> package com.pearson.epen.managedBean.converter;
> import java.io.Serializable;
> import java.util.List;
> import javax.annotation.PostConstruct;
> import javax.enterprise.context.SessionScoped;
> import javax.faces.component.UIComponent;
> import javax.faces.context.FacesContext;
> import javax.faces.convert.Converter;
> import javax.faces.convert.FacesConverter;
> import javax.inject.Inject;
> import javax.persistence.EntityManager;
> import org.slf4j.Logger;
> import com.pearson.epen.account.model.api.TestAdmin;
> import com.pearson.epen.cdi.qualifier.CentralRepo;
> import com.pearson.epen.cdi.qualifier.StaticData;
> @SessionScoped
> @FacesConverter("convert.TestAdmin")
> public class TestAdminConverter implements Converter, Serializable {
>     private static final long serialVersionUID = 1L;
>     @Inject
>     @StaticData
>     private List<TestAdmin> admins;
>     @Inject
>     private FacesContext context;
>     @Inject
>     @CentralRepo
>     private EntityManager em;
>          @Inject
>     private Logger log;
>         @PostConstruct
>     public void init() {
>         log.info("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%init");
>     }
>     @Override
>     public Object getAsObject(FacesContext context, UIComponent component, 
> String value) {
>         try {
>             Long id = Long.valueOf(value);
>             for (TestAdmin admin : admins) {
>                 if (admin.getId().longValue() == id.longValue()) {
>                     return admin;
>                 }
>             }
>                       } catch (Throwable t) {
>             log.error("got exception", t);
>         }
>         return null;
>     }
>     @Override
>     public String getAsString(FacesContext context, UIComponent component, 
> Object value) {
>         TestAdmin testAdmin = (TestAdmin) value;
>         return Long.toString(testAdmin.getId());
>     }
> }
> In above code, all injections are null and the @PostConstruct method is never 
> called. However, getAsObject(FacesContext context, UIComponent component, 
> String value) and getAsString(FacesContext context, UIComponent component, 
> Object value) did get called.
> According to some other users, the injection works for them. But I am not 
> sure they have multiple seam modules being used in the same war.
> Our war is big and it is difficult to isolate our application to just use 
> seam faces, not others. So I am not creating a sample war. But it should be 
> easy for seam faces developer to test this.
> I ended up doing bean lookup in my converter and it seems working and the 
> bean is found in my converter.
>  public List<T> findBeanRef(FacesContext context, String beanELName) {
>         BeanManager bm = (BeanManager) (((ServletContext) 
> context.getExternalContext().getContext())
>                 
> .getAttribute("org.jboss.seam.faces.javax.enterprise.spi.BeanManager"));
>         Bean bean = bm.getBeans(beanELName).iterator().next();
>         CreationalContext ctx = bm.createCreationalContext(bean);
>         List<T> list = (List<T>) bm.getReference(bean, bean.getClass(), ctx);
>         return list;
>     }

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
_______________________________________________
seam-issues mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/seam-issues

Reply via email to