在Servlet中收集用户输入并在同一点返回以继续编程:Java

时间:2013-07-02 19:44:34

标签: java servlets web-applications

我有一个用Java进行标题匹配的Web应用程序。

Servlet是控制器,在Servlet的其中一个方法中,我正在比较两个标题列表。第一个列表位于HashMap,第二个列表来自查询ResultSet

我想要做的是自动匹配具有相同标题的那些,并为用户提供确认具有某些相似性(业务逻辑)的选项。基本上,我需要获得用户输入,然后在同一点返回以继续。

我尝试了JOptionPane对话框但它没有用。 现在我尝试转发到另一个HTML页面以获取用户输入,然后返回到Servlet

以下是Servlet代码:

while (Querylist.next()) {
    String title = Querylist.getString(1).trim().toLowerCase();

    if (MyMap.containsKey(title))
    {
    // confirm match
    } else 
    {
        //some title2 is like title
        request.setAttribute("Title1", title);
        request.setAttribute("Title2", title2);
        RequestDispatcher view =   request.getRequestDispatcher("TitleMatch.jsp");
        view.forward(request, response);  
        ResultMatch= request.getParameter("ResultMatch");
        if (ResultMatch.equals("YES"))
        {
           // confirm match
        }
    }

}

HTML页面:

<B> <%= request.getAttribute("Title1")%></B>
<B> <%= request.getAttribute("Title2")%></B>
<FORM method="get" action="DataMerge">
    <input type = "radio" name="MatchResult" value="YES" /> YES
    <input type = "radio" name="MatchResult" value="NO" checked/>NO
    <button type = "submit"   formaction="DataMerge" > <b>CONFIRM</b>
</FORM>        

编辑:循环工作,我有一个java.lang.IllegalStateException异常。 有没有人可以帮助弄清楚如何在普通Java中有效地做到这一点?

我搜遍了所有的SO并且没有发现类似的东西。提前谢谢。

1 个答案:

答案 0 :(得分:0)

您可能想重新考虑您的方法,因为您编写的代码存在许多基本问题。例如:

  1. while循环测试不正确。假设您使用的是Iterator,那么测试应该是list.hasNext();
  2. if测试嵌套且不正确。您不能使用标识符Map,因为它是类的名称,您应该使用地图对象的名称。
  3. 如果循环工作了view.forward(request,response);会在第二个周期导致java.lang.IllegalStateException异常,因为无法重新发送响应。
  4. 我建议你不要试图一次发送一个标题对,而是在一个JSP上显示所有标题对(或者如果有太多标题对,则每个标题对旁边都有一个“是”按钮,并且当用户单击时是按钮,对另一个更新数据库的servlet(或后者用于更新数据库的数组)进行AJAX调用。

    在SOF和YouTube中有一些关于使用AJAX和JSP的好教程。