2014-10-04 43 views
0

出於某種原因,我在doGet方法中追加到StringBuffer(sb)的代碼HTML沒有在另一個Servlet中被拾取。追加到StringBuffer(Java Servlets)不拾取作爲Servlet中的屬性

這是HTML代碼,我追加到的StringBuffer某人:

/** 
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
*/ 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    ServletContext context = request.getSession().getServletContext(); 
    List<Course> courses = (List<Course>) context.getAttribute("COURSES"); 

    StringBuffer sb = new StringBuffer(); 
    sb.append(getHeader()); 
    sb.append("<form action=\"/Assignment_2/addCourse\">"); 
    sb.append("<table border=\"2\">"); 
    //sb.append("<tr><td>"); 

    //sb.append("</tr></td>"); 
    sb.append("<select>" 
      + "<option value = book>Book</option>" 
      + "<option value=tablet>Tablet</option>" 
      /*+ "<option value=xxxxxx>XXXXXXX</option>" 
      + "<option value=yyyyy>YYYYY</option>"*/ 
      + "/select>"); 
    sb.append("<tr><td>Type</td><td><input type=\"text\" name=\"type\" value=\"\" /></td></tr>"); 
    sb.append("<tr><td>Name</td><td><input type=\"text\" name=\"name\" value=\"\" /></td></tr>"); 
    sb.append("<tr><td>Additional Info</td><td><input type=\"text\" info=\"Additional Info\" value=\"\" /></td></tr>"); 
    sb.append("<tr><td># of Copies</td><td><input type=\"text\" name=\"# of Copies\" value=\"\" /></td></tr>"); 

    /*for (Course course : courses) { 
     sb.append("<input type=\"checkbox\" name=\"prerequisite\" value=\"" + course.getCode() + "\">" + course.getCode() + "</input> <br />"); 
    }*/ 


    sb.append("</td></tr><tr><td><input type=\"submit\" value=\"Add\" /></td></tr></table></form>"); 
    sb.append("</body></html>"); 
    PrintWriter out = response.getWriter(); 
    out.println(sb.toString()); 
} 

public String getHeader() { 
    StringBuffer sb = new StringBuffer(); 
    sb.append("<html>"); 
    sb.append("<head><title>Department Library</title></head><body>"); 
    return sb.toString(); 
} 

所以後用戶點擊提交後,該代碼放在這裏:

/** 
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
*/ 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    ServletContext context = request.getSession().getServletContext(); 
    List<Course> courses = (List<Course>) context.getAttribute("COURSES"); 
    for (Course course : courses) { 
     System.out.println(course); 
    } 

    StringBuffer sb = new StringBuffer(); 
    sb.append(getHeader()); 

    sb.append("<table border=\"2\"><tr>" 
      + "<td>ID</td>" 
      + "<td>Type</td>" 
      + "<td>Name</td>" 
      + "<td>Additional Info</td>" 
      + "<td>Available</td>" 
      + "<td>Operation</td></tr>"); 
    for (Course course : courses) { 
     sb.append("<tr><td>"); 
     sb.append(course.getMyId() + "</td><td>" + course.getType() + "</td>"); 
     /*sb.append("<td>"); 
     for (String str : course.getPrerequisites()) { 
      sb.append(str + " "); 
     }*/ 
     sb.append("</td><td>" 
       + course.getName()); 

     sb.append("</td><td>" 
       + course.getAdditionalInfo()); 
     sb.append("</td><td>" 
       + course.getAvailable()); 

     sb.append("</td><td><a href=\"edit?code="+course.getCode() +"\">Edit</a></td>");//</tr>"); 



    } 
    sb.append("</table><a href=\"add\">Add Items</a></body></html>"); 


    PrintWriter out = response.getWriter(); 
    out.println(sb.toString()); 
} 

public String getHeader() { 
    StringBuffer sb = new StringBuffer(); 
    sb.append("<html>"); 
    sb.append("<head><title>Department Library</title></head><body>"); 
    return sb.toString(); 
} 

這條線:

for (Course course : courses) { 
     System.out.println(course); 
    } 

告訴我,我的數據沒問題... Servlets發生了什麼?

************* EDIT ****************

當添加下面(我的原稿的第一方法中):

sb.append("<tr><td>Available</td><td><input type=\"text\" name=\"available\" value=\"\" /> </td></tr>"); 

doGet我收到我的表中的數據!但由於某種原因(在同一個文件中):

sb.append("<tr><td>Additional Info</td><td><input type=\"text\" name=\"info\" value=\"\" /> </td></tr>"); 

沒有被讀取,例如,它在我的表中讀取爲'null'。我沒有爲輸入輸入'null'(只是爲了澄清)。

此外..我點擊下一個/提交/添加任何提交表單操作輸入後,我的數據/輸入在URL中可見。

+0

提交空表後,你會得到什麼? – 2014-10-04 08:46:44

+0

null被放入附加信息(info)和可用(可用)HTML thingy's ... – cryptomath 2014-10-04 09:21:39

+0

當你點擊提交按鈕時,你能夠調用你的第二個servlet嗎? – 2014-10-04 09:22:09

回答

1
in first method... 

/*for (Course course : courses) { 
     sb.append("<input type=\"checkbox\" name=\"prerequisite\" value=\"" + course.getCode() + "\">" + course.getCode() + "</input> <br />"); 
    }*/ 

in second method 

String [] temp=request.getparameterbyValues("prerequisite"); 

for (i=0;i<=temp.length;i++) { 

     System.out.println(temp[i]); 
    } 
+0

取消註釋並運行後沒有錯誤;我仍然認爲數據應該放在哪裏。 – cryptomath 2014-10-04 09:24:57

+0

您是否能夠在第一種方法加載後在HTML上看到多個複選框.... – koutuk 2014-10-04 09:31:31

+0

請將您的方法從doGet更改爲doPost,這將解決您的問題....因爲操作默認呼叫請發帖 – koutuk 2014-10-04 09:35:27

0

您還沒有使用第二個servlet中請求對象的值。您只是從上下文對象讀取值。