Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用多个按钮/帖子处理表单_Java_Jsp_Servlets_Jakarta Ee - Fatal编程技术网

Java 使用多个按钮/帖子处理表单

Java 使用多个按钮/帖子处理表单,java,jsp,servlets,jakarta-ee,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&

我有以下表单设置:

<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/Servlets,但不确定如何处理此操作的上载部分的post,而不是其他操作


我认为最好创建某种表单控制器,它处理表单的发布并根据用户的操作委托给其他servlet。我不知道如何告诉用户选择了什么。

可以为您处理所有这些。

type=按钮不会自动提交表单。只有type=submit才会显示

如果您希望每个按钮都提交并执行不同的操作,那么您有几个选项。我认为您提到的让单个servlet决定用户正在做什么并转发到另一个servlet的选项是一个好主意。通过在属性映射中查找按钮的名称,可以知道用户正在做什么

   String btn = request.getParameter("submitbuttonname");
   if(btn != null){
      //this was the button clicked.
   }

我能想到的第二个选择是将表单分解为多个表单。您需要为每个按钮提交文件吗?如果没有,请使用需要提交的数据创建表单,每个表单都有自己的提交按钮。

提交按钮的值与所有其他表单值一起在POST请求中传输,名称为按钮名称,值为按钮值

因此,您可以通过检查与不同按钮关联的每个键的值的存在性来检测按下了哪个按钮,或者如果您将按钮命名为相同的名称,则只需检查键的值


此外,按钮元素需要onClick处理程序来实际提交表单和/或为提交元素执行任何工作。默认的onClick处理程序调用表单的submit,它可以用JavaScript处理

function submitTo(url) {
    form.action = url;
    form.submit();
}

<input name="download" onClick="submitTo('/download')" ... />

最好的方法是使用一个表单控制器将逻辑委托给其他类,具体取决于作为参数传递的输入类型值。

对于每个其他普通元素,一个的名称-值对将作为请求参数发送

主要的警告是,和元素在MSIE中不能正常工作。在所有MSIE版本中,button元素的value属性不会作为参数值发送,而是发送其主体标记内容

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

与所有浏览器结合使用的解决方案是使用并为所有浏览器指定不同的名称或相同的名称但不同的值

例如

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


顺便说一句,我当然假设您已经在使用它来处理多部分表单数据,如果需要的话,可以借助一个,否则您将无法从HttpServletRequestgetParameter获得任何信息。

我已经在使用它来处理实际的上传。并非所有按钮都在提交文件,但会在后台触发其他进程。我尝试使用您上次提出的建议,所有提交按钮都具有相同的名称和不同的值,但当我从请求中检索操作时,它始终为空。我有与上面相同的html,除了名称的改变。阅读我答案的最后一段:目前,我没有解析任何东西。我只需要调用我的控制器servlet的表单。但是,由于表单设置为多部分/表单数据,我认为我必须将信息放在正确的位置?非常感谢BalusC。正是我想要的:-通过查看您的代码,从这个解决方案中学到了很多东西。
<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.
}