java - 将事件从数据库加载到日历 primefaces

标签 java html jsf primefaces java-ee-6

我在使用 primefaces 中的“计划”组件将一些日期加载到日历中时遇到问题。这是我的 client.xhtml 的样子:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">

    <body>

        <ui:composition template="./PlanningTemplate.xhtml">

            <ui:define name="top">
                top
            </ui:define>

            <ui:define name="content">
            <p:schedule id="schedule" value="#{scheduleController.eventModel}" widgetVar="myschedule">  
                 <p:ajax event="dateSelect" listener="#{scheduleController.onDateSelect}"  oncomplete="eventDialog.show()" />  
                 <p:ajax event="eventSelect" listener="#{scheduleController.onEventSelect}" oncomplete="eventDialog.show()" />  
                 <p:ajax event="eventMove" listener="#{scheduleController.onEventMove}"  />  
                 <p:ajax event="eventResize" listener="#{scheduleController.onEventResize}"  />  

            </p:schedule>
                <p:dialog widgetVar="eventDialog" header="Event Details" showEffect="clip" hideEffect="clip">  
        <h:panelGrid id="eventDetails" columns="2">  
            <h:outputLabel for="title" value="Title:" />  
            <p:inputText id="title" value="#{scheduleController.event.title}" required="true"/>  

            <h:outputLabel for="from" value="From:" />  
            <p:inputMask id="from" value="#{scheduleController.event.startDate}" mask="99/99/9999">  
                <f:convertDateTime pattern="dd/MM/yyyy" />  
            </p:inputMask>  

            <h:outputLabel for="to" value="To:" />  
            <p:inputMask id="to" value="#{scheduleController.event.endDate}" mask="99/99/9999">  
                <f:convertDateTime pattern="dd/MM/yyyy" />  
            </p:inputMask>  




        </h:panelGrid>  
    </p:dialog> 
            </ui:define>




            <ui:define name="bottom">
                bottom
            </ui:define>

        </ui:composition>

    </body>
</html>

烘焙看起来像这样:

@Named(value = "scheduleController")
@SessionScoped
public class scheduleController implements Serializable {
    @PersistenceContext(unitName="MajanTelepointagePU")
    EntityManager em;
    private ScheduleModel eventModel;
    private ScheduleEvent event = new DefaultScheduleEvent() {};

    List<Intervention> listOfAllInterventions = new ArrayList<Intervention>();


    public scheduleController(){
        eventModel = new DefaultScheduleModel();
        // Load here the events into the eventModel via the method aventmodel.addEvent(title,startDate,endDate)

        //get the list of all interventions
        listOfAllInterventions = em.createNamedQuery("Intervention.findAll").getResultList();
        for(Intervention i : listOfAllInterventions){
            eventModel.addEvent(new DefaultScheduleEvent(i.getNotesGeneral(),i.getHeureDebut(),i.getHeureFin()));

        }



    }
    public ScheduleModel getEventModel() {
        return eventModel;
    }

    public void setEventModel(ScheduleModel eventModel) {
        this.eventModel = eventModel;
    }

    public ScheduleEvent getEvent() {
        return event;
    }

    public void setEvent(ScheduleEvent event) {
        this.event = event;
    }


    public void addEvent(ActionEvent actionEvent) {  
        if(event.getId() == null) { 
            eventModel.addEvent(event);  }
        else { 
            eventModel.updateEvent(event);  }

        event = new DefaultScheduleEvent();  
    }  

    public void onEventSelect(SelectEvent selectEvent) {  
        event = (ScheduleEvent) selectEvent.getObject();  
    }  

    public void onDateSelect(SelectEvent selectEvent) {  
        event = new DefaultScheduleEvent("", (Date) selectEvent.getObject(), (Date) selectEvent.getObject());  
    }  

    public void onEventMove(ScheduleEntryMoveEvent event) {  
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Event moved", "Day delta:" + event.getDayDelta() + ", Minute delta:" + event.getMinuteDelta());  

        addMessage(message);  
    }  

    public void onEventResize(ScheduleEntryResizeEvent event) {  
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Event resized", "Day delta:" + event.getDayDelta() + ", Minute delta:" + event.getMinuteDelta());  

        addMessage(message);  
    }  

    private void addMessage(FacesMessage message) {  
        FacesContext.getCurrentInstance().addMessage(null, message);  
    }  


}

但是 client.xhtml 没有运行,这里是异常的完整堆栈跟踪:

com.google.common.collect.ComputationException: java.lang.RuntimeException: java.lang.NullPointerException
    at com.google.common.collect.ComputingConcurrentHashMap$ComputingMapAdapter.get(ComputingConcurrentHashMap.java:397)
    at org.jboss.weld.bean.proxy.ClientProxyProvider.getClientProxy(ClientProxyProvider.java:102)
    at org.jboss.weld.el.AbstractWeldELResolver.lookup(AbstractWeldELResolver.java:115)
    at org.jboss.weld.el.AbstractWeldELResolver.getValue(AbstractWeldELResolver.java:96)
    at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:188)
    at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
    at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
    at com.sun.el.parser.AstIdentifier.getValue(AstIdentifier.java:103)
    at com.sun.el.parser.AstValue.getValue(AstValue.java:179)
    at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:224)
    at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50)
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
    at javax.faces.component.UIOutput.getValue(UIOutput.java:169)
    at org.primefaces.util.ComponentUtils.getValueToRender(ComponentUtils.java:64)
    at org.primefaces.component.inputtext.InputTextRenderer.encodeMarkup(InputTextRenderer.java:77)
    at org.primefaces.component.inputtext.InputTextRenderer.encodeEnd(InputTextRenderer.java:51)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312)
    at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185)
    at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129)
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
    at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:59)
    at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:47)
    at org.primefaces.component.dialog.DialogRenderer.encodeContent(DialogRenderer.java:172)
    at org.primefaces.component.dialog.DialogRenderer.encodeMarkup(DialogRenderer.java:101)
    at org.primefaces.component.dialog.DialogRenderer.encodeEnd(DialogRenderer.java:43)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1764)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402)
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
    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 org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.RuntimeException: java.lang.NullPointerException
    at org.jboss.weld.util.reflection.SecureReflectionAccess.runAsInstantiation(SecureReflectionAccess.java:186)
    at org.jboss.weld.util.reflection.SecureReflections.newInstance(SecureReflections.java:341)
    at org.jboss.weld.bean.proxy.ProxyFactory.create(ProxyFactory.java:242)
    at org.jboss.weld.bean.proxy.ClientProxyProvider.createClientProxy(ClientProxyProvider.java:87)
    at org.jboss.weld.bean.proxy.ClientProxyProvider.access$000(ClientProxyProvider.java:43)
    at org.jboss.weld.bean.proxy.ClientProxyProvider$1.apply(ClientProxyProvider.java:53)
    at org.jboss.weld.bean.proxy.ClientProxyProvider$1.apply(ClientProxyProvider.java:46)
    at com.google.common.collect.ComputingConcurrentHashMap$ComputingValueReference.compute(ComputingConcurrentHashMap.java:355)
    at com.google.common.collect.ComputingConcurrentHashMap$ComputingSegment.compute(ComputingConcurrentHashMap.java:184)
    at com.google.common.collect.ComputingConcurrentHashMap$ComputingSegment.getOrCompute(ComputingConcurrentHashMap.java:153)
    at com.google.common.collect.ComputingConcurrentHashMap.getOrCompute(ComputingConcurrentHashMap.java:69)
    at com.google.common.collect.ComputingConcurrentHashMap$ComputingMapAdapter.get(ComputingConcurrentHashMap.java:393)
    ... 62 more
Caused by: java.lang.NullPointerException
    at MajanTelepointage.BB.scheduleController.<init>(scheduleController.java:48)
    at MajanTelepointage.BB.scheduleController$Proxy$_$$_WeldClientProxy.<init>(scheduleController$Proxy$_$$_WeldClientProxy.java)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    at java.lang.Class.newInstance0(Class.java:372)
    at java.lang.Class.newInstance(Class.java:325)
    at org.jboss.weld.util.reflection.SecureReflections$16.work(SecureReflections.java:344)
    at org.jboss.weld.util.reflection.SecureReflectionAccess.run(SecureReflectionAccess.java:52)
    at org.jboss.weld.util.reflection.SecureReflectionAccess.runAsInstantiation(SecureReflectionAccess.java:173)
    ... 73 more

更准确地说,错误引用了以下行:

 listOfAllInterventions = em.createNamedQuery("Intervention.findAll").getResultList();

感谢您的帮助:)

最佳答案

您了解堆栈跟踪吗?这表明构造函数内的 emnull。您也可以直接这么说,而不是显示堆栈跟踪。 java.lang 包中的异常相当微不​​足道。

无论如何,注入(inject)的依赖项在构造函数中确实不可用。从技术上讲,不可能在构造实例之前设置实例字段的值。如果您想在实例构造之后直接处理注入(inject)的依赖项,那么您应该使用 @PostConstruct 带注释的方法。

替换

public scheduleController(){

@PostConstruct
public void init() {

并且em将在那里可用。

<小时/>

与具体问题无关Java naming conventions规定类名必须以大写字母开头。请也努力解决这个问题。

关于java - 将事件从数据库加载到日历 primefaces,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16261344/

相关文章:

javascript - 如何在 ADF 中加载 JSF 片段(如正文 onload)时调用 javascript 函数

jsf - 使用 JSF 绘制图形结构

java - GWT 应用程序加载时间

java - JPA/Hibernate - 不需要的部分回滚和 session 处理

java - JavaFX 中的新窗口中显示内容时如何关闭选项卡

javascript - 如何使用 jquery 添加 img 标签的 alt 属性

javascript - 我可以在 Fabric.js 中创建更复杂的形状吗?

java - 改进 Java API 文档?

javascript - CSS 如何设置宽度?

java - JSF 每 2 秒从系统动态加载属性文件