【问题标题】:JSP/Servlet if error stay on same page instead of forwardingJSP/Servlet 如果错误停留在同一页面而不是转发
【发布时间】:2012-10-29 09:12:10
【问题描述】:

我是新来的,整个晚上都在处理这个问题。我知道这应该很简单,我只是错过了一些愚蠢的东西。我有一个 jsp 页面和一个 servlet(下面的代码)。我正在尝试从我的数据库中搜索一个客户,这很有效。但是,如果找不到客户,我想在同一个 jsp 页面上发布一条错误消息,以便用户可以重新输入电话号码,以防他们犯了错误。我不确定如何做到这一点。我可以很好地转发到新的“客户”页面,并且我已成功尝试重定向回同一页面,但我不知道如何将消息放在那里。请帮忙!

jsp页面

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" isELIgnored="false" %>
    <%@ page import="java.util.*" %>  
    <%@ include file="staticpages/pageHeader.html" %>
        <br />      
            <hr />
            <br />
            <form name="custform" method="POST" action="ChooseCustomer.do" >
            <span class="sectionheader">Look Up Customer by Phone Number:</span>

            <input type="text" name="phone1" size="3" maxlength="3" onKeyUp="checklen(this)" />             
            <input type="text" name="phone2" size="3" maxlength="3" onKeyUp="checklen(this)" />
            <input type="text" name="phone3" size="4" maxlength="4" onKeyUp="checklen(this)" />
            <input type="submit" name="formaction" value="Search" />
            <input type="submit" name="formaction" value="Enter New Customer" />
            </form> 
    <%@ include file="staticpages/pageFooter.html" %>

servlet 代码

package pizzapkg;

import java.io.IOException;
import java.sql.ResultSet;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ChooseCustomer
 */
@WebServlet("/ChooseCustomer")
public class ChooseCustomer extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)  */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Customer c = null;
        if (request.getParameter("formaction").equals("Search")) {

                Database db = (Database) getServletContext().getAttribute("db");
            /* Search Database for existing customer */
            String searchPhone = request.getParameter("phone1") 
                    + request.getParameter("phone2") 
                    + request.getParameter("phone3");
            String sql = "SELECT * FROM customers WHERE cust_phone=\"" + searchPhone + "\";";
            ResultSet rs;
            try {
                rs = db.runSqlQuery(sql);
                rs.next();
                c = new Customer(rs.getString("cust_id"), rs.getString("cust_fname"), 
                        rs.getString("cust_lname"), rs.getString("cust_address"), 
                        rs.getString("cust_city"), rs.getString("cust_state"), 
                        rs.getString("cust_zip"), rs.getString("cust_phone"),
                        rs.getString("cust_notes"));
            } catch (Exception e) { e.printStackTrace(); }
            request.setAttribute("customer", c);        
        }
        RequestDispatcher rd = request.getRequestDispatcher("/customer.jsp");
        rd.forward(request, response);
    }
}

PS 这是我第一次构建 servlet,所以这对我来说是全新的。我喜欢示例,因此您可以提供的任何帮助将不胜感激。

【问题讨论】:

  • 虽然 Yoigendra 的答案在技术上是正确的,但他的整个答案使用的技术已经被认为已死、已弃用和劝阻了十多年。我强烈建议您查看我们的 servlets wiki 页面。它包含一个根据 MVC 思想正确使用 JSP 和 Servlet 的具体示例,其中还包括验证:stackoverflow.com/tags/servlets/info

标签: java mysql jsp


【解决方案1】:

如果找不到客户,您可以在 servlet 内的 request 对象中设置一个标志,例如

          request.setAttribute("customerFound", "No");

在你的 JSP 中,放置一个 JSP scriptlet 来检查请求属性并在任何你想要的地方打印消息,例如如果您想要&lt;HR/&gt; 之后的消息,那么:

        <hr />
        <% if("No".equals(request.getAttribute("customerFound")) { %>
            <div style="color: red">No customer found</div>
        <% } %>
        <br />

我正在分享实现您想要的结果的非常基本的方法。

【讨论】:

  • 感谢@Yogendra Singh!它工作得很好,有时基本的更好。
  • HTML 字体标签自 1998 年以来已被弃用。不要使用它!看到一个相对较高声誉的用户推荐它是相当令人惊讶的。这同样适用于使用 scriptlets 而不是 EL,自 2003 年以来不鼓励使用。OP 显然使用的是 Servlet 3.0 / JSP 2.2。使用 scriptlets 根本不适合那里。
  • @BalusC:与Div 更新。看起来不错?我已经提到过,这是实现结果的最基本方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-04
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多