【问题标题】:Why can't enter in the doPost() method of this servlet when I submit a form?为什么我提交表单时无法进入这个servlet的doPost()方法?
【发布时间】:2015-01-29 12:55:23
【问题描述】:

我是 JSP 和 Servlet 开发的新手,我必须做以下事情:

我有一个包含 JQuery 按钮元素的 JSP 页面。

<th width = "8.33%">
  <form action="salwf.do" method="post">
    <button name="status" value="Accept" class="acceptButton">ACCEPT BUTTON</button>
    <button name="status" value="Cancel" class="cancelButton">CANCEL BUTTON</button>
    <button name="status" value="SAP" class="sapButton">SAP ICON BUTTON</button>
  </form>
</th>

如您所见,我将这个按钮元素放入了一个表单中。每个按钮的所有按钮都有一个名为 status 的属性,每个按钮都有一个特定的值(Accept 用于第一个按钮,Cancel 用于第二个按钮,Sap 用于第三个按钮)。

好的,现在我想将此表单提交给处理包含该表单的页面的 Servlet。该页面的网址如下:

http://localhost:7001/edi-mon/salwf.do

这是web.xml文件中的servlet配置(Servlet定义和Servlet URL映射):

<servlet>
    <servlet-name>salwf</servlet-name>
    <servlet-class>it.sistinf.ediweb.monitor.servlets.Salwf</servlet-class>
    <load-on-startup>0</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>salwf</servlet-name>
    <url-pattern>/salwf.do</url-pattern>
</servlet-mapping>

然后我有一个实现HttpServlet 接口并处理这个JSP 页面的Salwf 类。 所以这个 Servlet 还要处理前一个表单的 post,为此我在这个类中实现了 doPost() 方法,这样:

protected void doPost(HttpServletRequest request, HttpServletResponse response)
                      throws ServletException, IOException {
    String status = request.getParameter("status");
}

所以我想检索 JQuery 单击按钮的 status 名称的值,但它不起作用。

在调试应用程序时,我尝试单击按钮,但从未进入doPost() 方法,因此无法检索状态请求参数的值。

为什么?我错过了什么?我该如何解决这个问题?

【问题讨论】:

  • 如何提交表格?我在那里没有看到 SUBMIT 控件,所以你必须使用 js。请添加点击功能。
  • @BigMike 究竟是什么意思?单击 3 个按钮之一时,不会自动提交表单?你能给我发一个代码 sn-p 来解决我的问题吗?
  • @AndreaNobili,当然不是。要汇总表单,您必须创建 submit 类型的 &lt;input&gt; 元素或使用 javascript 调用表单的 submit() 方法。
  • 顺便说一句,您所有的按钮都具有相同的名称。我不确定这是你真正想要的。
  • @AlexR,IE 会将没有typebutton 视为submit - 所以如果这是他正在测试的地方,他实际上可能会看到它提交

标签: jquery jsp jakarta-ee servlets


【解决方案1】:

这应该可以工作,不涉及 jQuery。有点赶时间,所以不能对代码进行过多打磨。

<th width = "8.33%">
  <form action="salwf.do" method="post" name='theForm'>
    <button value="Accept" class="acceptButton" onclick='setVal("accept")'>ACCEPT BUTTON</button>
    <button value="Cancel" class="cancelButton" onclick='setVal("cancel")'>CANCEL BUTTON</button>
    <button value="SAP" class="sapButton" onclick='setVal("sap")'>SAP ICON BUTTON</button>
    <input type='hidden' name='status'>
  </form>
</th>
<script>
function setVal(buttonCmd) {
   document.forms['theForm'].status.value = buttonCmd;
   document.forms['theForm'].submit();
   return false;
}

</script>

它是如何工作的:它在每个按钮的点击事件上绑定一个js函数,当按钮被按下时,名为“status”的隐藏输入的值被设置为一个取决于按钮本身的值并提交表单.

可能有更优雅和更简洁的方法,但这是我想到的最简单的方法,无需深入您的 HTML 结构。

【讨论】:

  • 嗯我理解你的评论,但它仍然无法进入我的 servlet 的 doPost() 方法
  • 您是否也更改了您的 HTML 以匹配我的?尝试将整个 url 放到你的 servlet 中(通常是 localhost:<port>/webappname/servletMapping
  • 不可能的amico mio。检查 webapp 是否正确部署。 Buona fortuna。
猜你喜欢
  • 2012-06-12
  • 1970-01-01
  • 2011-08-18
  • 1970-01-01
  • 2012-02-27
  • 2011-02-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-28
相关资源
最近更新 更多