Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在servlet呈现的JSP中处理这种情况?(如果我有东西要显示,如果我必须打印错误消息)_Java_Jsp_Jakarta Ee_Servlets - Fatal编程技术网

Java 如何在servlet呈现的JSP中处理这种情况?(如果我有东西要显示,如果我必须打印错误消息)

Java 如何在servlet呈现的JSP中处理这种情况?(如果我有东西要显示,如果我必须打印错误消息),java,jsp,jakarta-ee,servlets,Java,Jsp,Jakarta Ee,Servlets,我是Java Web应用程序开发的新手,基于Servlet的webapp有以下问题 因此,我有一个HttpServlet,用于处理针对URL模式的请求: http://localhost:7001/edi-mon/salwf.do 使用包含显示手风琴菜单的JQuery的JSP页面来呈现这样的视图: 每个accordion节都包含与对象相关的信息,该对象具有类saldetaglio,该类被放入一个数组中,该数组是从放入节中的servlet(使用web服务)检索到的 在呈现此视图(包含一些信息的

我是Java Web应用程序开发的新手,基于Servlet的webapp有以下问题

因此,我有一个HttpServlet,用于处理针对URL模式的请求:

http://localhost:7001/edi-mon/salwf.do
使用包含显示手风琴菜单的JQueryJSP页面来呈现这样的视图:

每个accordion节都包含与对象相关的信息,该对象具有类saldetaglio,该类被放入一个数组中,该数组是从放入节中的servlet(使用web服务)检索到的

在呈现此视图(包含一些信息的表)之前,我的servlet实际上与web服务联系,获取包含web服务响应的Out对象

Out对象内部包含两个对象,它们是:

  • 一个saldetaglio对象数组,我使用它来呈现我的手风琴菜单(每个对象对应于每个手风琴部分)

  • 包含web服务响应状态的Esito对象(如果web服务调用成功,它可以是OK;如果web服务调用失败,它可以是KO

  • 因此,实际上我的servlet包含一个service()方法,如下所示:

    public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
            LoggerMDC.setup(req, res);
            Logger logger = (Logger) Logger.getStdLogger(Monitoraggio.class); // do not declare 'logger' as static field in order to work with MDC
    
            String service = req.getParameter("serv");
            String matricola = req.getParameter("matricola");
            char serviceId = Utility.getServizio(req.getParameter("serv"));
    
            // Retrieve the web service output:
            Out reportSal = getSalReport(matricola,"","");
    
            // The collection that have to be shown in a table inside the JSP view:
            SalDettaglio[] salDettaglio = reportSal.getSal();
            HttpSession session = req.getSession(false);
            session.setAttribute("salDettaglio", salDettaglio);
    
            gotoPage(ConfigurationFactory.getPropertiesPages().getProperty("pagina_salwf"), req, res);
    
    }
    
    正如您在前面的代码中所看到的,首先我检索webservice响应(Out对象),然后从中检索内部saldetaglio[]数组,然后我将该数组放入会话中,以便在JSP页面中使用它来呈现手风琴,方法如下:

    <div id="accordion">
    
        <%
        for (SalDettaglio salDettaglio : (SalDettaglio[]) request.getSession(false).getAttribute("salDettaglio")) {
        %>
            <h2>
                ACCORDION HEADER
            </h2>
    
            <div>
                ACCORDION CONTENT
            </div>
    </div>
    
    
    手风琴头
    手风琴内容
    
    因此,通过这种方式,我将包含与对象相关信息的手风琴菜单显示到saldetaglio[]数组中,但是,通过这种方式,我不考虑进入上一个Out.Esito对象的webservice状态

    例如,如果Out.Esito值是KO而不是OK我将有一个空的saldetaglio[]数组,我不必显示手风琴菜单,但我想使用AJAX显示错误消息(例如弹出窗口或类似的东西)

    如何处理这种情况

    我对这些话题不是很在行,我不知道我的想法是否是一个明智的解决方案

    我想我可以做以下几件事:

  • 在我的servlet的service()方法中,我将整个对象(包含saldetaglio[]数组和代表webservice状态的Esito对象的webservice响应)放出来,而不仅仅是saldetaglio[]数组

  • 然后在我看来,如果Out.Esito值为OK我将显示手风琴菜单,并加入Out.saldetaglio[]对象。而如果Out.Esito值为KO则我不显示手风琴,而是在我的页面中显示一条错误消息


  • 可能是一个智能解决方案,或者我遗漏了什么?

    如果您想在jsp页面中显示从servlet发送的错误消息,并在jsp页面中显示它,则代码必须与以下代码类似:

    <% if(!request.getAttribute("errorMessage").isEmpty()){
     out.println(requet.getAttribute("errorMessage"));
    } %>
    
    
    

    errorMessage属性必须在将请求发送到jsp页面的servlet中定义,或者如果您使用的是jquery,则可以从servlet中的PrintWriter发送该属性,并编写将显示在jsp文件中的脚本。我希望我的回答能帮助您

    您的解决方案还可以。将数组和结果状态都放在jsp上。然后根据状态显示表格或错误消息。