JSP 中的隐藏输入在将其传递给 servlet 时会产生 null

Posted

技术标签:

【中文标题】JSP 中的隐藏输入在将其传递给 servlet 时会产生 null【英文标题】:Hidden input in JSP produces null when passing it to the servlet 【发布时间】:2012-08-08 11:03:34 【问题描述】:

在我的 JSP 中,我执行以下操作:

<!-- Bank manager's permissions -->

<!--more stuff goes here -->
<fieldset>
  <legend>To open a new account</legend> 
  <form action="blablabla">    
      <input type="hidden" name="hdField" value="myValue" />  // note I pass a "myValue" as string 
      <a href="employeeTransaction1">Press here to continue</a>  
  </form>
</fieldset>

在我的 Servlet 中,我抓取了隐藏的输入:

@WebServlet("/employeeTransaction1")
public class Employee1 extends HttpServlet 
    private static final long serialVersionUID = 1L;


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    
        String getHiddenValue=request.getParameter("hdField");
        System.out.println("Hidden field Value :"+getHiddenValue);
        // forwards to the page employeeOpenNewAccount.jsp
        request.getRequestDispatcher("/WEB-INF/results/employeeOpenNewAccount.jsp").forward(request, response);
    




System.out.println 在控制台生成:null

为什么我得到一个不是我通过的实际值的null

问候

编辑:

改成后:

<fieldset>
  <legend>To open a new account</legend> 
  <form action="/employeeTransaction1" method="GET">
      <input type="hidden" name="hdField" value="myValue"/>
      <a href="employeeTransaction1">Press here to continue</a>  
  </form>
</fieldset>

null 仍显示在控制台上。

【问题讨论】:

您提交到正确的 uri 了吗? 可以添加表单开始标签吗? @UVM:是的,当转发发生时,结果是正确的,但是 hidden value 是 null 。除此之外,其他一切都很好。 @Razvan:我实际上并没有使用它。真的需要吗? 【参考方案1】:

使用 href 标记不会提交您的表单,即它不会将表单中定义的参数传递给请求。您应该改用 input type="submit"button 标签。还要确保表单操作与您的 @WebServlet 定义匹配。

<fieldset>
  <legend>To open a new account</legend> 
  <form action="/employeeTransaction1">    
      <input type="hidden" name="hdField" value="myValue" />  // note I pass a "myValue" as string 
      <input type="submit" value="Submit" />
  </form>
</fieldset>

【讨论】:

【参考方案2】:

您要做的是将表单发送到服务器。但是,事实上,你不会那样做。您只需发出 GET 请求(当用户点击您的链接时:&lt;a href="employeeTransaction1"&gt;Press here to continue&lt;/a&gt;

如果您想发送表单,请确保正确设置表单标签的属性并向表单添加提交按钮

 <form action="/employeeTransaction1" method="GET">
 ...
 <input type="submit" value="Submit" />
 ...
 </form>

根据您发送表单的首选方式,您可以将method="GET" 参数更改为method="POST",并确保在servlet 中您使用doPost() 方法处理表单

或者,如果您的目的不是将 from 发送到服务器,而只是传递隐藏输入的值,则应将其值添加为 GET 请求中编码的参数。类似的东西:

  /employeeTransaction1?hdField=myValue

为此,您需要一些客户端处理,即当用户单击链接时,应将隐藏的输入添加到get中,然后发出请求。

【讨论】:

@Razvav: 更改为这个时我仍然得到null:`
要开设一个新帐户
按这里继续
`
在原帖中编辑。 我已经有一个href 按钮,为什么还要再添加一个呢?我已经测试了你的建议,但它仍然不起作用 - 这意味着我添加了 Submit 但它一直失败。顺便说一句 - 我不需要发送表格 - 只是发送 hidden input 。跨度> 当然,您在尝试发送表单时可能会遗漏一些细节。如果隐藏的输入值没有,请将您的 href 更改为:employeeTransaction1?hdField=myValue。如果它不是静态的,则需要在 javascript 中处理它以将其添加到 href

以上是关于JSP 中的隐藏输入在将其传递给 servlet 时会产生 null的主要内容,如果未能解决你的问题,请参考以下文章

java web开发(jsp传递数据给servlet)

java web开发(jsp传递数据给servlet)

JSP中的7个指令

将 ResultSet 从 servlet 传递给 JSP

在java中将Arraylist值从servlet传递到JSP?

java web开发(servlet传递数据给jsp)