1

我有一个由 View 范围 bean InputTablePlot.java支持的 Ajax 发布请求表单 *input_graph.xhtml* ,我有一个带有 eager=true 的应用程序范围 bean,它在应用程序启动时创建一个连接池。我已将此应用程序范围的 bean 作为 InputTablePlot 中的托管属性注入,并从中检索连接对象。连接池在部分提交中可用,但在通过单击命令按钮“绘图”调用的提交方法中为 NULL。

输入.xhtml

 <?xml version='1.0' encoding='UTF-8' ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:p="http://primefaces.org/ui">
    <f:view contentType="text/html">
        <h:head>
        </h:head>
        <h:body>
            <h:panelGroup id="container" style="background-color: white"
                layout="block">
                <h:panelGroup id="center" class="column" layout="block">
                    <h:form>
                        <p:messages id="validations" />
                        <p:panelGrid columns="2" styleClass="panelgrid">
                            <h:outputLabel for="ip" value="Source:"></h:outputLabel>
                            <p:selectManyMenu id="ip" value="#{inputTablePlot.ipAddress}"
                                required="true" requiredMessage="Enter Source">
                                <f:selectItems value="#{inputTablePlot.ipAddressList}" />
                                <p:ajax listener="#{inputTablePlot.populateDstn}" event="change" 
                                    update="dstn" process="@this"/>
                            </p:selectManyMenu>
                            <h:outputLabel for="dstn" value="Destination:"></h:outputLabel>
                            <p:selectManyMenu id="dstn" value="#{inputTablePlot.m_destination}"
                                required="true" requiredMessage="Enter Destination">
                                <f:selectItems value="#{inputTablePlot.m_destinationMenu}" />
                            </p:selectManyMenu>
                            <h:outputLabel for="start_date">Start Date/Time:</h:outputLabel>
                            <p:calendar id="start_date" value="#{inputTablePlot.startDtTime}"
                                navigator="true" pattern="MM/dd/yyyy hh:mm:ss a" required="true"
                                requiredMessage="Enter Start Date/Time" effect="fadeIn">
                            </p:calendar>
                            <h:outputLabel for="stop_date">Stop Date/Time:</h:outputLabel>
                            <p:calendar id="stop_date" value="#{inputTablePlot.stopDtTime}"
                                navigator="true" pattern="MM/dd/yyyy hh:mm:ss a" required="true"
                                requiredMessage="Enter Stop Date/Time" effect="fadeIn">
                            </p:calendar>
                            <h:outputLabel>Period:</h:outputLabel>
                            <p:selectOneMenu value="#{inputTablePlot.selPeriodType}"
                                required="true" requiredMessage="Enter Period">
                                <f:selectItems value="#{inputTablePlot.periodType}" />
                                <p:ajax listener="#{inputTablePlot.modifyperiod}" event="change"
                                     process="@this" partialSubmit="true"/>
                            </p:selectOneMenu>
                            <p:inputText id="txt1" value="#{inputTablePlot.period}" />
                            <p:slider for="txt1" id="slider"/>
                            <h:commandButton value="Plot" action="#{inputTablePlot.submit}"
                                styleClass="button" id="bt2"></h:commandButton>
                            <h:commandButton value="Clear" action="#{inputTablePlot.clear}"
                                styleClass="button"></h:commandButton>
                        </p:panelGrid>
                        <p:defaultCommand target="bt2" />
                    </h:form>
                </h:panelGroup>
            </h:panelGroup>
        </h:body>
    </f:view>
    </html>

InputTablePlot.java

@ManagedBean
@ViewScoped
     public class InputTablePlot implements Serializable
        {
            private List<Long> m_ipAddress;
            private Map<String, Long> m_ipAddrMenu;
            private List<Long> m_destination;
            private Map<String, Long> m_destinationMenu;
            private List<Long> m_ssrc;
            private Map<String, Long> m_ssrcMenu;
            private Date m_startDtTime;
            private Date m_stopDtTime;
            private int m_period;
            private List<String> m_periodType;
            private String m_selectedPrdType;

            @ManagedProperty("#{analyzerUIDatabase}")
            private transient AnalyzerUIDatabase m_analyzerUIDatabase;
            private List<List<PeriodStats>> m_results;
            private StringBuilder m_query;


            public InputTablePlot()
            {
                m_ipAddrMenu = new LinkedHashMap<String, Long>();
                m_destinationMenu = new LinkedHashMap<String, Long>();
                m_periodType = new ArrayList<String>();
                m_results = new ArrayList<List<PeriodStats>>();
                m_period = 10;
                m_query = new StringBuilder();
            }

            @PostConstruct
            public void init()
            {
                m_ipAddrMenu.clear();// Removing existing sources
                m_destinationMenu.clear();// Removing existing destinations
                m_periodType.clear();// Removing existing period types

                m_periodType.add("Seconds");
                m_periodType.add("Minutes");
                m_periodType.add("Hours");
                m_periodType.add("Days");

                try
                {
                    Connection m_connection = null;
                    ResultSet m_rs = null;
                    PreparedStatement m_pst_query = null;
                    m_query.setLength(0);
                    m_connection = m_analyzerUIDatabase.getConnection();
                    //process query
                    m_pst_query = m_connection.prepareStatement(m_query.toString());
                    m_rs = m_pst_query.executeQuery();
                    while (m_rs.next())
                    {
                        m_ipAddrMenu.put(ipLongToString(m_rs.getLong("IPADDRESS")), m_rs.getLong("IPADDRESS"));
                    }
                    m_rs.close();
                    m_query.setLength(0);
                    m_pst_query.close();
                    m_connection.close();
                }
                catch (SQLException e)
                {
                    e.printStackTrace();
                }
            }



        > //Getters and Setters

            public String submit()
            {
                System.out.println("In Submit >>>>>>>> ");
                log(m_analyzerUIDatabase); // <-- 

        > Returning NULL

                log(m_startDtTime);
                log(m_stopDtTime);
                log(m_selectedPrdType);
                log(m_period);
                log(m_ipAddress);
                log(m_destination);


                if (m_startDtTime.after(m_stopDtTime))
                {
                    FacesContext facesContext = FacesContext.getCurrentInstance();
                    FacesMessage facesMessage = new FacesMessage("Stop Date/Time should be after Start Date/Time");
                    facesContext.addMessage("tableplot:validations", facesMessage);
                    return "FAILURE";
                }
                else if (m_selectedPrdType.equalsIgnoreCase("Seconds") && m_period < 10)
                {
                    FacesContext facesContext = FacesContext.getCurrentInstance();
                    FacesMessage facesMessage = new FacesMessage("Minimum Period in Seconds is 10");
                    facesContext.addMessage("tableplot:validations", facesMessage);
                    return "FAILURE";
                }
                else
                {
                    Connection m_connection = null;
                    ResultSet m_rs = null;
                    PreparedStatement m_pst_query = null;

                    for (int i = 0; i < m_ipAddress.size(); i++)
                    {
        // Execute some logic
                    Flash flash = FacesContext.getCurrentInstance().getExternalContext().getFlash();
                    flash.put("m_results", m_results);
                    flash.put("resultJSON", resultJSON);
                    return "SUCCESS";
                }
            }

            public void populateDstn()
            {

                System.out.println("ipaddr : " + this.m_ipAddress);
                Connection m_connection = null;
                ResultSet m_rs = null;
                PreparedStatement m_pst_query = null;

                try
                {
                    m_destinationMenu.clear();
                    m_connection = m_analyzerUIDatabase.getConnection();
                    //execute some logic
                    m_rs.close();
                    m_query.setLength(0);
                    ipAddress.setLength(0);
                    m_pst_query.close();
                    m_connection.close();
                }
                catch (SQLException e)
                {
                    FacesContext.getCurrentInstance().addMessage("tableplot:validations", new FacesMessage("Problem fetching Destinations"));
                    e.printStackTrace();
                }

            }

            private void log(Object object)
            {
                String methodName = Thread.currentThread().getStackTrace()[2].getMethodName();
                System.out.println("MyBean " + methodName + ": " + object);
            }

        }

堆栈跟踪

START PHASE RESTORE_VIEW 1
userAgent ::: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36   accept :: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
userAgent ::: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36   accept :: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
userAgent ::: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36   accept :: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
END PHASE RESTORE_VIEW 1
START PHASE APPLY_REQUEST_VALUES 2
END PHASE APPLY_REQUEST_VALUES 2
START PHASE PROCESS_VALIDATIONS 3
MyBean getIpAddress: [168821850]
MyBean getIpAddress: [168821850]
MyBean getM_destination: null
MyBean getM_destination: null
END PHASE PROCESS_VALIDATIONS 3
START PHASE UPDATE_MODEL_VALUES 4
MyBean setIpAddress: [168821850]
MyBean setM_destination: [168821876]
END PHASE UPDATE_MODEL_VALUES 4
START PHASE INVOKE_APPLICATION 5
In Submit >>>>>>>> 
MyBean submit: null
MyBean submit: Wed Jul 17 00:00:00 CDT 2013
MyBean submit: Fri Jul 19 00:00:00 CDT 2013
MyBean submit: Seconds
MyBean submit: 10
MyBean submit: [168821850]
MyBean submit: [168821876]
java.lang.NullPointerException
at com.InputTablePlot.submit(InputTablePlot.java:298)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.sun.el.parser.AstValue.invoke(AstValue.java:234)
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:681)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:452)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:138)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:564)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:213)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1083)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:379)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:175)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1017)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:136)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
    at org.eclipse.jetty.server.Server.handle(Server.java:445)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:260)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:225)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.run(AbstractConnection.java:358)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:596)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:527)
    at java.lang.Thread.run(Thread.java:722)
END PHASE INVOKE_APPLICATION 5
START PHASE RENDER_RESPONSE 6
MyBean getIpAddress: [168821850]
MyBean getIpAddress: [168821850]
MyBean getM_destination: [168821876]
MyBean getM_destination: [168821876]
END PHASE RENDER_RESPONSE 6
4

0 回答 0