【问题标题】:Why does my HTML form's action tag ignore it's other GET-variables generated by JSP?为什么我的 HTML 表单的操作标记会忽略它是由 JSP 生成的其他 GET 变量?
【发布时间】:2025-12-24 18:45:12
【问题描述】:

我有一个 HTML 表单,其动作标记重定向到同一页面,并带有由 JSP 生成的附加变量(变量打印现有变量),但是当我使用该表单时,它仅显示当前 URL,仅包含表单中的变量,所以其他的,JSP生成的,变量都不见了。我的(简化的)表格如下所示:

<form id="tfnewsort" method="get" action="./index.jsp?categorie=<% out.println(categorie); %>&minprijs=<% out.println(stringminprijs); %>&maxprijs=<% out.println(stringmaxprijs); %>">
  <select name="sorteermethode" id="sortselect">
    <option value="date_added">
      Datum oplopend
    </option>
  </select>
</form>

如您所见,它应该重定向到通过打印一些变量并将其自己的变量(“sorteermethode”)附加到 URL 末尾而创建的 URL。现在,当我实际使用它时,它会重定向到类似“http://localhost:8080/webshop/index.jsp?sorteermethode=name”的内容,基本上忽略其他变量并将其替换为它自己的变量,而不是将其附加到 URL 的末尾。有谁知道我做错了什么(除了使用 JSP 脚本)和/或如何解决这个问题?

我将非常感谢任何帮助!

【问题讨论】:

  • 我很惊讶没有人建议使用 POST 作为方法。

标签: html forms jsp url action


【解决方案1】:

表单数据生成一个新的查询字符串。这取代了现有的。

如果您想在其中放入额外的数据,请将其放入隐藏的输入元素而不是操作中。

【讨论】:

    【解决方案2】:

    将其用作hidden 输入字段,因为查询字符串和&lt;form&gt; 的方法也是GET

    <input type="hidden" name="categorie" value="<% out.println(categorie); %>" />
    <input type="hidden" name="minprijs" value="<% out.println(stringminprijs); %>" />
    <input type="hidden" name="maxprijs" value="<% out.println(stringmaxprijs); %>" />
    

    【讨论】:

    • 没问题!不幸的是,我现在偶然发现了我的下一个问题。隐藏字段把变量搞得一团糟。我的 URL 现在是这样展开的:localhost:8080/bosstamps/…。它添加了很多百分号和随机数。你能帮我这个忙吗?
    • 表单中的隐藏字段应该生成普通的字符串 GET 变量,例如 'Category;Postzegels'(指定显示项目的类别)。相反,它们现在会在 URL 中生成奇怪的字符串,例如 Category%3B%25%0D%0A。它还对 JSP 在隐藏字段中生成的其他变量执行此操作。因此,我的 JSP 无法使用这些值。
    • 别担心,它们是转义变量...如果您以英语以外的任何其他语言访问*,例如。希腊语或印地语,URL 看起来像这样,使 unicode 字符与地址栏一起工作是完全正常的。你明白吗?
    • 我想我明白了。有没有办法将其转换回原始字符串,由隐藏字段中使用的 JSP 生成? JSP 不会自动执行此操作,因此会使这些值无用并且不显示任何项目(因为没有任何名为 Category%3B%25%0D%0A 的类别)。
    • 有没有可以用来解码字符串的 (JSP) 函数?
    【解决方案3】:

    您应该将其他变量添加为隐藏的输入元素。 GET 的目的是将所有输入值添加到查询字符串中,它不会将它们与当前操作合并。

    【讨论】: