java - 处理具有多个按钮/帖子的表单

标签 java jsp servlets jakarta-ee

我有以下表单设置:

<html>
<head></head>

<body>
<form method="post" enctype="multipart/form-data" action="FileUpload">
    <table>
        <th>WEX SI Online Validation</th>
        <tr>
            <td>Step 1: Select File for Validation: </td>
            <td><input name="filename" type="file"/></td>
        </tr>
        <tr>
            <td>Step 2: Validate File:</td>
            <td><input name="validate" type="button" value="Validate"/></td>
        </tr>
        <tr>
            <td>Step 3: Download and Fix Errors:</td>
            <td><input name="download" type="button" value="Download"/></td>
        </tr>
        <tr>
            <td>Step 4: Submit</td>
            <td><input name="submit" type="submit" value="Submit"/></td>
        </tr>
    </table>
</form>
</body>

</html>

我该如何处理?我正在使用 Java/JSP/Servlet,但我不确定如何处理此上传部分的帖子以及其他操作。

我认为最好创建某种表单 Controller 来处理表单的提交并根据用户的操作委托(delegate)给其他 servlet。不过,我不确定如何判断用户选择了什么。

最佳答案

至于每隔一个正常<input>元素,name-value一对<input type="button">将作为请求参数发送。

主要的警告是 <input type="button"><button>元素在 MSIE 中无法正常工作。在所有 MSIE 版本中,value按钮元素的属性不会作为参数值发送,而是发送其主体(标签内容)!

此外,在 IE6 中还有另一个惊人的错误:不仅会发送按下按钮的名称-值对,而且还会发送表单中所有其他未按下按钮的名称-值对!这样你根本无法区分服务器端按下的按钮。

适用于所有浏览器的解决方案是使用 <input type="submit">并给它们一个不同的名称(或相同的名称但不同的值)。

例如

<input type="submit" name="validate" value="Validate">
<input type="submit" name="download" value="Download">
<input type="submit" name="submit" value="Submit">

结合

if (request.getParameter("validate") != null) {
    // Validate button pressed.
} else if (request.getParameter("download") != null) {
    // Download button pressed.
} else if (request.getParameter("submit") != null) {
    // Submit button pressed.
}

<input type="submit" name="action" value="Validate">
<input type="submit" name="action" value="Download">
<input type="submit" name="action" value="Submit">

结合

String action = request.getParameter("action");
if ("Validate".equals(action)) {
    // Validate button pressed.
} else if ("Download".equals(action)) {
    // Download button pressed.
} else if ("Submit".equals(action)) {
    // Submit button pressed.
}

最后一种方法提供了更多可能性,可以在 Java 级别更好地抽象一个和另一个。

顺便说一下,我当然假设您已经在使用 Apache Commons FileUpload处理多部分表单数据,必要时借助 Filter which puts the multipart form data back in the request parameter map , 否则你不会从 HttpServletRequest#getParameter() 得到任何东西.

关于java - 处理具有多个按钮/帖子的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2147455/

相关文章:

java - 如何恢复我的导入/接口(interface)并修复我的项目?

java - Eclipse/Android错误: R can not be resolved to a variable

java - 实现java集合不丢失信息

java - 该网址在本地主机中有效,但在服务器中无效

jsp - 如何将重定向发送到 Servlet 中的 JSP 页面

javascript - js中如何调用外部jsp

javascript - 使用 Javascript/Jquery 访问 Servlet 响应属性

java - 如何使用 Retrofit 发出请求

java - 设置请求 header 并转发到另一个应用程序

java - 在 JSP 页面中收到的变量值为 null