[英]Struts 1 Losing Request Parameters after Failed Form Validation with Multipart/Form-Data Enctype
[英]after enctype="multipart/form-data" request not working
public class Relay extends HttpServlet {
@Override
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String command = request.getParameter("command");
RequestDispatcher rd =request.getRequestDispatcher(command);
rd.forward(request, response);
System.out.println("Request forwarded to " + command + " servlet");
}
}
这是我的中继 servlet,我从这个表单发送数据
<form action="Relay" method="POST" enctype="multipart/form-data"> /
<input type="hidden" name="command" value="AddProduct" />
<input type="text" name="pname" value="" />
<input name="" type="submit" value="Add Product">
</form>
它抛出一个java.lang.NullPointerException
。
但是当我删除它时工作正常:
enctype="multipart/form-data"
那为什么需要添加呢? 把它放在外面。
如果您需要它以便通过<input type="file">
上传您打算稍后添加的<input type="file">
,那么您应该在您的 servlet 上放置@MultipartConfig
注释,以便request.getParameter()
将起作用并且所有上传的文件可以通过request.getPart()
检索。
@WebServlet("/Relay")
@MultipartConfig
public class Relay extends HttpServlet {
// ...
}
使用multipart/form-data
编码的参数在 POST 正文中发送 - 不是作为常规请求参数,因此无法使用request.getParamter(...)
读取。
查看Commons 文件上传包以进行多部分请求处理。
我包括这个只是为了提供故障排除的附加信息。 如果您遇到困难并想知道通过多部分请求获得的所有参数是什么,您可以使用以下代码打印所有参数。
MultipartRequest multi = <Your code to retrieve multipart request goes here. Sorry but can not post code as I use proprietary APIs>
Enumeration en1 = multi.getParameterNames();
while (en1.hasMoreElements()) {
String strParamName = (String)en1.nextElement();
String[] strParamValues = multi.getParameterValues(strParamName);
for (int i = 0; i < strParamValues.length; i++) {
System.out.println(strParamName + "=" + strParamValues[i]);
}
}
删除表单标签并使用
echo <?php form_open_multipart('Controller/function');
每当我使用enctype="multipart/form-data"
时,我都遇到了同样的问题,我没有得到文件名,当我删除它时,它工作正常,试试它对我有用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.