简体   繁体   English

将@ManagedBean和@ViewScoped更改为@Named和@ CoversationScoped,javax.el.PropertyNotFoundException

[英]Change @ManagedBean and @ViewScoped to @Named and @CoversationScoped, javax.el.PropertyNotFoundException

I have two beans annotated with @ManagedBean , @ViewScoped and an ejb annotated with @Stateless . 我有两个豆注解@ManagedBean@ViewScoped和带注释的EJB @Stateless I'm using @EJB and @ManagedProperty to inject ejb and bean into another. 我正在使用@EJB and @ManagedProperty将ejb和bean注入另一个。 Thats is working, but I understand that it is butter to use CDI annotation. 多数民众赞成在工作,但我知道使用CDI注释是黄油。 When I change to @Named and @ConversationScoped , I have an Exception: 当我更改为@Named@ConversationScoped ,出现异常:

javax.el.PropertyNotFoundException: /dashboardBacker.xhtml @15,80 binding="#{dashboardBacker.dashboard}": Target Unreachable, identifier 'dashboardBacker' resolved to null
    at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:133)
    at com.sun.faces.application.ApplicationImpl.createComponentApplyAnnotations(ApplicationImpl.java:1949)
    at com.sun.faces.application.ApplicationImpl.createComponent(ApplicationImpl.java:1144)
    at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.createComponent(ComponentTagHandlerDelegateImpl.java:504)
    at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:157)
    at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
    at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
    at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
    at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:184)
    at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
    at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
    at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
    at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:184)
    at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
    at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
    at com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:93)
    at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
    at com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:86)
    at com.sun.faces.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:152)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.buildView(FaceletViewHandlingStrategy.java:774)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:100)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:242)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:216)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:132)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:338)
    at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
    at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3288)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3254)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
    at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
    at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2163)
    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2089)
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2074)
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1513)
    at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:254)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)

Here is my model: 这是我的模型:

@Named
@ConversationScoped
public class DashboardModelView implements Serializable {     
    private static final long serialVersionUID = 1L;
    /* Nombre de colonne par defaut*/
    public static final int DEFAULT_COLUMN_COUNT = 3;
    private DashboardModel model;    
    @Inject
    private DashboardEJB dashboarEJB;    
    private List<Indicator>indicatorList;      
    @PostConstruct
    public void init() {
        indicatorList = dashboarEJB.findIndicators();
                model = new DefaultDashboardModel();
                for( int i = 0, n = DEFAULT_COLUMN_COUNT; i < n; i++ ) {
                    model.addColumn( new DefaultDashboardColumn() );
                }
    }     
    public DashboardModel getModel() { return model; }
    public void setModel(DashboardModel model) { this.model = model; }
    public List<Indicator> getIndicatorList() {
        return indicatorList;
    }
    public void setIndicatorList(List<Indicator> indicatorList) {
        this.indicatorList = indicatorList;
    }
}

And here is my managed bean: 这是我的托管bean:

@Named
@ConversationScoped
public class DashboardBacker implements Serializable {
    private static final long serialVersionUID = 1L;
    private Dashboard dashboard;
@Inject
private DashboardEJB dashboarEJB;
    @Inject
    private DashboardModelView dashboardModelView; 
    public DashboardBacker() {
    }
     @PostConstruct
    public void init() {
        FacesContext fc = FacesContext.getCurrentInstance();
        Application application = fc.getApplication();
        String componentType = "org.primefaces.component.Dashboard";
        String rendredType = "org.primefaces.component.DashboardRenderer";
        dashboard = (Dashboard) application.createComponent(fc, componentType, rendredType);
        dashboard.setId("dynamic_dashboard");
        dashboard.setModel(dashboardModelView.getModel());
        addChildren();
    }
    private void addChildren() {
        dashboard.getChildren().clear();
        FacesContext fc = FacesContext.getCurrentInstance();
        Application application = fc.getApplication();
        String panelType = "org.primefaces.component.Panel";
        String rendredPanelType = "org.primefaces.component.PanelRenderer";
        int index = 0;
        for(Indicator indicator : dashboardModelView.getIndicatorList()){
            Panel panel = (Panel) application.createComponent(fc, panelType, rendredPanelType);
            panel.setId("id" + Long.toString(indicator.getId()));
            panel.setHeader(indicator.getLibelle());
            panel.setClosable(true);
            panel.setToggleable(true);
            dashboard.getChildren().add(panel);
            DashboardColumn column2 = dashboardModelView.getModel().getColumn(index%DashboardModelView.DEFAULT_COLUMN_COUNT);
            column2.addWidget(panel.getId());
            HtmlOutputText text = new HtmlOutputText();
            text.setId("t"+Long.toString(indicator.getId()));
            text.setValue(indicator.getValeur() + "");
            panel.getChildren().add(text);
            index++;
        }
    }
    public Dashboard getDashboard() {
      //  addChildren();
        return dashboard;
    } 
    public void setDashboard(Dashboard dashboard) {
        this.dashboard = dashboard;
    }    
    public DashboardModelView getDashboardModelView() {
        return dashboardModelView;
    }
    public void setDashboardModelView(DashboardModelView dashboardModelView) {
        this.dashboardModelView = dashboardModelView;
    }   
    public void handleReorder(DashboardReorderEvent event) {  
PersistableModel persistableModele = new PersistableModel ();
        persistableModele.setWidgetId(event.getWidgetId()); 
        persistableModele.setItemIndex(event.getItemIndex()); 
        persistableModele.setColumnIndex(event.getColumnIndex());
        persistableModele.setSenderIndex(event.getSenderIndex());
        dashboarEJB.persisteModele(persistableModele);  
    } 
}

And here is the ejb: 这是ejb:

@Stateless
public class DashboardEJB {
    @PersistenceContext(unitName = "SUIVIMCO")
    private EntityManager em;
    public List<Indicator> findIndicators() {
        TypedQuery<Indicator> query = em.createNamedQuery("findAllIndicators",
                Indicator.class);
        return query.getResultList();
    }
    public void persisteModele(PersistableModele persistableModele){
        em.persist(persistableModele);
    }
}

Do you have any idea about the problem? 您对这个问题有任何想法吗?

Thank you in advance 先感谢您

I confirme that the beans.xml file is required for CDI to work. 我确认需要bean.xml文件才能使CDI正常工作。

<?xml version="1.0" encoding="UTF-8"?>
<beans 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/beans_1_0.xsd">

</beans>

Thank you guys. 感谢大伙们。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM