我有两个用@ManagedBean
,@ViewScoped
注释的bean和用@Stateless
注释的EJB。我正在使用@EJB and @ManagedProperty
将EJB和Bean注入另一个。那是有效的,但我知道使用CDI注释是黄油。当我更改为@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)
这是我的模型:
@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;
}
}
这是我的托管豆:
@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);
}
}
这是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);
}
}
您对这个问题有任何想法吗?
预先感谢您
我确认CDI需要beans.xml文件。
<?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>
谢谢你们。