getParameter 始终为空

getParameter always null

我现在有 2 个 servlet。我左边有一个导航栏,右边有一个内容space。我使用以下 JS 将 servlet 输出放在正确的位置

    $(document).ready(function() {                        
        $('#navigation').load('Navigation');
        $('#content').load('Content');
    });

在导航中,我有链接以便在内容 space 中获取我想要的文章。因此,在导航的每个类别名称上,我都有对另一个 servlet 的引用。所以导航是一个servlet,内容是一个servlet。问题是,内容没有 "get" 导航名称。

    String category = request.getParameter("category");
    String suche = request.getParameter("suche");

我试图获取我点击的类别名称作为 ID,或者我输入的搜索字符串。两者都不起作用。导航中的类别如下所示:

out.println("<li><a><form method='get'><button type='submit' name='category' value='"+ k2.getKategorieNr() + "'>" + k2.getKName() + "</button></form></a></li>");

我猜问题是每次我点击一个类别时,整个 HTML 页面都会重新加载,导航 servlet 中的名称不能被内容 servlet 引用,所以 getParameter returns 在内容 servlet 中始终为 null。我只是不知道如何设计我的网络应用程序才能使其正常工作。有什么想法吗?

将 "category" 的值放入隐藏字段而不是按钮:

out.println("<li><a><form method='get'><button type='submit'>" + k2.getKName() + "</button><input type='hidden' name='category' value='"+ k2.getKategorieNr() + "'/></form></a></li>");

当提交 html 元素时,有一些适用的规则。首先,表单将提交到由表单的 action 属性定义的页面。其次,对服务器的请求将包含任何 <input> 元素的值。

在您的情况下,缺少 action 属性,因此您需要使用以下内容修复您的代码:

<form action="/servlet1" .... >

然后您必须指定要提交的内容。在您的情况下,您没有随表单提交的字段。因此在您的 servlet 中,语句 request.getParameter("anyAttribute") 将始终 return 为空。所以你必须在你的表单中包含一些要提交的值,比如

<form action="/servlet1" method="get">
  <input type="hidden" name="category" value="categoryname"/>
  <button type="submit">submit</button>
</form>

此代码会将 form 提交到映射在您的 web.xml 中的 Servlet 作为 servlet1,您可以在 doGet() 中获取类别值使用 request.getParameter("category").

的 Servlet 方法

为了扩展您的功能,您还可以使用 ajax 提交以避免每次都重新加载页面。我会推荐 ajax-jQuery implementation to do that