2012-07-01 140 views
0

得到一個家庭作業,給我的問題....它修改一個JSF項目與兩個頁面和一個bean,以適應MVC2通過添加兩個頁面和一個控制器servlet和另一個bean另外兩頁。新的主頁面轉發到第二個新頁面或舊的第一個頁面。我的問題是response.getParameter()總是導致null。request.getParameter()返回null

<%@page session="false" import="java.util.Iterator"%> 
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> 
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> 
<jsp:useBean id="status" scope="request" class="JSFRegistration.Status" /> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd"> 

    <html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
     <title>JSP Page</title> 
    </head> 
    <body> 
     <% if (status!=null && !status.isSuccessful()){%> 
      <font color="red">Processing errors: 
       <ul><%Iterator errors=status.getExceptions(); 
      while (errors.hasNext()){ 
       Exception e = (Exception) errors.next();%> 
       <li><%= e.getMessage()%><%}%></ul></font><%}%> 
     <form action="LoginServlet" method="POST"> 
      <% String username = request.getParameter("username"); 
      if (username==null) username="";%> 
      <input type="text" name="usernameTF" value="<%=username%>" /> 
      <% String password = request.getParameter("password"); 
      if (password==null) password="";%> 
      <input type="password" name="passwordTF" value="<%=password%>" /> 
      <input type="submit" value="Login" /> 
     </form> 

    </body> 
</html> 

這基本上是從我們的書直接複製,但我需要新的主頁的字段。控制器servlet也是一樣的,除了只包含我需要的字段之外的直接副本。

protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    RequestDispatcher view = null; 
    Status status = new Status(); 
    request.setAttribute("status", status); 
    String username = request.getParameter("username"); 
    String password = request.getParameter("password"); 
    if (username==null || username.length()==0) 
     status.addException(new Exception("Please enter username")); 
    if (password==null) 
     status.addException(new Exception("Please enter password")); 
    if (!status.isSuccessful()){ 
     view = request.getRequestDispatcher("Login.jsp"); 
     //view.forward(request, response); 
    } 
    else 
     try{ 
      request.setAttribute("username", username); 
      request.setAttribute("password", password); 
     view = request.getRequestDispatcher("Registration.jsp"); 
     } catch (Exception e) { 
      status.addException(new Exception("Error")); 
      view = request.getRequestDispatcher("Login.jsp"); 
     } 
    view.forward(request, response); 
} 

和Status類,再次從書中直接複製。

public class Status { 
private ArrayList exceptions; 

public Status(){ 
    exceptions = new ArrayList(); 
} 
public void addException(Exception exception) { 
    exceptions.add(exception); 
} 
public boolean isSuccessful(){ 
    return (exceptions.isEmpty()); 
} 
public Iterator getExceptions(){ 
    return exceptions.iterator(); 
} 

無論在兩個框中輸入什麼內容,逐步執行調試都會顯示未傳遞給參數的值。如果兩個都有文本,如果只有一個文本和兩個都是空的,我會在屏幕上方顯示創建的例外。

回答

2

您的請求參數名稱與輸入字段名稱不匹配。您已將輸入字段的名稱分配爲usernameTFpasswordTF。然後,它們可以通過請求參數的名稱來提供,但是您正試圖使用​​名稱usernamepassword來獲取它們。因此,您需要修復輸入字段名稱或請求參數名稱,以便它們相互匹配。順便說一下,爲什麼從像JSF這樣的現代MVC框架退步到混雜業務代碼的尷尬90年代風格的JSP? 真的是作業任務是什麼問你?此外,HTML <font>元素自1998年起已棄用。您從哪裏瞭解到這一點?課程的質量真的很好嗎?

+0

啊,完全忽略了。老實說,我已經落後了,這本書和額外的內容已經過時了。本書對JSF沒有任何幫助,因爲它顯示了在NetBeans中支持Visual JSF時的所有內容,並且它不在NetBeans 7中。它不提供任何代碼,我在此處發佈的內容是額外內容的副本因爲它是我們最接近的例子,而不需要額外的工作來自己學習。這個課程不是必需的,我只是把它作爲一個認證的一些選修課的更有趣的課程。 –

+0

您可以在我們的JSF標籤wiki頁面找到JSF教程。 http://stackoverflow.com/tags/jsf/info我也會和你的導師討論課程材料的質量。如果這是任務所期望的,我會很驚訝。 – BalusC

+0

而且它有一個很大的學習曲線,pre-req並沒有涵蓋這個班級期望我們已經知道的很多東西,都使用同一本書。 –