【问题标题】:java/html form submission -> request.getParameter("..."); only returns the first portion of a string?java/html 表单提交 -> request.getParameter("...");只返回字符串的第一部分?
【发布时间】:2011-07-06 23:13:08
【问题描述】:

我不确定如何表达我的问题。但我有一个 html 表单将数据提交到 java 后端,该后端处理数据并将其提交到数据库。

java 表单使用 javax.servlet.http.HttpServletRequest 库获取我的每个值

所以为了获取值:

<input type="text" name="firstName">

在 java 页面中我会这样做:

String firstName = request.getParameter("firstName");

这很好用,但是如果我输入的是两个单词,它只会返回第一个。

所以说我把“约翰·乔治”作为我的名字, java 页面只会收到“John”。

我不知道为什么。

表格代码:

   foot =  "<form method='POST' action='Submit'>";
    //path to java servlet 
    foot += "<input type='hidden' name='firstName' value="+firstName+">"; 
    foot += "<input type='hidden' name='lastName' value="+lastName+">"; 
    foot += "<input type='hidden' name='school' value="+school+">"; 
    foot += "<input type='hidden' name='email' value="+email+">"; 

【问题讨论】:

  • 它不适用于它们中的任何一个。现在我正在使用 POST tho
  • 我不知道,我的工作。带有 post 的简单表单,点击我的 servlet doPost(request, response) 获取参数。
  • hmm.. 可能是我实际上在使用隐藏的表单类型吗? "";
  • 您能从表单中发布所有代码吗?
  • 仅供参考,下次只需编辑您的问题,以便阅读。

标签: java html forms


【解决方案1】:

每个属性值都应该用引号括起来。您的属性用引号括起来(大多数浏览器可以处理),但您的值属性没有任何引号包装。所以你的输出看起来像这样:

<input type='hidden' name='firstName' value=John George>

因为值没有用引号括起来,因此浏览器将“John”解释为 value 属性的值,而“George”解释为没有值的新属性。

用引号括起你的 value 属性应该可以解决这个问题。

foot =  "<form method=\"POST\" action=\"Submit">";
//path to java servlet 
foot += "<input type=\"hidden\" name=\"firstName\" value=\""+firstName+"\">"; 
foot += "<input type=\"hidden\" name=\"lastName\" value=\""+lastName+"\">"; 
foot += "<input type=\"hidden\" name=\"school\" value=\""+school+"\">"; 
foot += "<input type=\"hidden\" name=\"email\" value=\""+email+"\">"; 

【讨论】:

    【解决方案2】:

    原因很简单:在浏览器中查看 HTML 源代码,您会看到:

    <input type='hidden' name='firstName' value=John George>
    

    所以你有一个有 4 个属性的 input 元素,最后一个属性是 George

    解决方案:

    1. 别忘了引用你的字符串
    2. 永远不要忘记将您添加到 HTML 中的 HTML 转义文本值

    第二点允许恶作剧的人对您的网站做非常讨厌的事情。见Cross-site scripting

    所以正确的代码是:

    foot += "<input type='hidden' name='firstName' value='"+StringEscapeUtils.escapeHtml(firstName)+"'>"; 
    

    StringEscapeUtils 可以在commons-lang 中找到。

    【讨论】:

      【解决方案3】:

      鉴于firstName = "John George" this: "&lt;input type='hidden' name='firstName' value="+firstName+"&gt;"; 在 HTML 中呈现为

      <input type='hidden' name='firstName' value=John George>
      

      所以“George”被解释为属性。请尝试正确添加引号:

      "<input type='hidden' name='firstName' value='" + firstName + "'>"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-22
        • 1970-01-01
        • 2016-12-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-29
        • 2015-05-14
        相关资源
        最近更新 更多