【问题标题】:Appending to StringBuffer (Java Servlets) Not Picking up as Attributes In Servlet附加到 StringBuffer(Java Servlet)不作为 Servlet 中的属性
【发布时间】:2014-11-29 05:33:16
【问题描述】:

由于某种原因,我在 doGet 方法中附加到 StringBuffer (sb) 的代码 HTML 没有在其他 servlet 中被拾取。

这是我附加到 StringBuffer sb 的 HTML 代码:

/**
 * @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);
    }

告诉我我的数据没有问题...Servlet 发生了什么?

******************编辑****************

添加以下内容时(在我原帖的第一种方法中):

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 中可见。

【问题讨论】:

  • 提交空表后得到了什么?
  • null 被放入 Additional Info (info) 和 Available (available) HTML thingy's...
  • 当你点击提交按钮时你能调用你的第二个 servlet 吗?
  • 编辑了一些有用的东西..
  • 已解决!!!! WHUPS 忘了把它添加到课堂上!!!!

标签: java jsp servlets


【解决方案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]);
    }

【讨论】:

  • 取消注释后运行无错误;我仍然在数据应该放置的位置查看“null”。
  • 在加载第一个方法后,您是否能够在 HTML 上看到多个复选框......
  • 请将您的方法从 doGet 更改为 doPost 这将解决您的问题....因为操作默认调用 do post
【解决方案2】:

您没有在第二个 servlet 中使用请求对象中的值。您只是从上下文对象中读取值。

【讨论】:

    猜你喜欢
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    • 2014-09-12
    • 2014-02-25
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多