2012-11-09 16 views
1

我是新來的,一直在這裏工作。我知道這應該很簡單,我只是想念一些愚蠢的東西。我有一個jsp頁面和一個servlet(代碼如下)。我試圖從我的數據庫中搜索出一個客戶,該客戶可以工作。但是,如果未找到客戶,我想在相同的jsp頁面上發佈錯誤消息,以便用戶可能重新輸入電話號碼以防萬一他們犯了錯誤。我不確定如何做到這一點。我可以轉發到新的「客戶」頁面,我已經嘗試成功重定向到同一頁面,但我不知道如何將消息放在那裏。請幫助!JSP/Servlet如果錯誤停留在同一頁面上而不是轉發

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的,所以這是所有新的給我。我愛的例子,所以任何幫助你可以給予將不勝感激。

+0

雖然Yoigendra的答案在技術上是正確的,但他的整個答案使用的技術已被認爲已死,已被棄用,並且已經有十多年的氣餒。我熱烈推薦你去看看我們的servlets wiki頁面。它包含一個具體的例子,它根據MVC思想體系正確使用JSP和Servlet,並涵蓋了驗證:http://stackoverflow.com/tags/servlets/info – BalusC

回答

1

如果找不到客戶,例如您可以在servlet內的request對象中設置一個標誌。

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

在您的JSP中,使用JSP腳本檢查請求屬性並在需要的地方打印消息,例如,如果你想那麼你<HR/>後的消息:

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

我分享實現你想要的結果非常基本的方式。

+0

謝謝@Yogendra Singh!它運作得很好,有時基本更好。 – JenRobb

+0

自1998年起,HTML字體標記已棄用。請勿使用它!看到相對較高聲譽的用戶推薦它是相當驚人的。這同樣適用於使用* scriptlets *而不是EL,從2003年開始不鼓勵使用OP。OP顯然使用Servlet 3.0/JSP 2.2。使用* scriptlets *根本不適合那裏。 – BalusC

+0

@BalusC:與'Div'同步。看起來很好?我已經提到過,這是實現結果的最基本的方式。 –

相關問題