多部分表单:如何在JSP中的隐藏输入中发送和获取参数
我有一个包含几个字段的多部分表单,这些字段的值需要发送到jsp文件 这是multipart表单,这是我发送参数的方式(在非multipart中,它可以完美地工作) 但是参数多部分表单:如何在JSP中的隐藏输入中发送和获取参数,jsp,input,hidden,multipartform-data,Jsp,Input,Hidden,Multipartform Data,我有一个包含几个字段的多部分表单,这些字段的值需要发送到jsp文件 这是multipart表单,这是我发送参数的方式(在非multipart中,它可以完美地工作) 但是参数${param.name}与其他参数一起为null 我做错了什么?在JSP中使用MultipartData时,您可以执行以下操作 1) 声明web.xml webapp版本3.0 2) 使用@MultiPartConfig配置控制器 3) 将JSP中的Java代码移动到控制器servlet 4) 如果您想在servlet中获得
${param.name}
与其他参数一起为null
我做错了什么?在JSP中使用MultipartData时,您可以执行以下操作
1) 声明web.xml webapp版本3.0
2) 使用@MultiPartConfig配置控制器
3) 将JSP中的Java代码移动到控制器servlet
4) 如果您想在servlet中获得该部分,请执行以下操作
Part mypart=request.getPart("Your Name Here")
mypart.getInputStream();
通过这种方式,您可以从JSP访问部件数据到servlet
如果您没有使用servlet 3.0及更高版本,则可以使用apache CommonFileUpload,我尝试使用
getPart()
,但它不起作用。我去了,它说我应该对上传的文件使用getPart()
,但对其他输入字段使用request.getParameter()
。
成功了!
我添加了以下代码:
final String name = request.getParameter("name");
final String startdate = request.getParameter("startdate");
final String deadline = request.getParameter("deadline");
final String website = request.getParameter("website");
final String termsnconds = request.getParameter("termsnconds");
并将其添加到查询中,以便在insert to
<c:forEach var="picture" items="${pictures.rows}">
<c:set var="competiname" value="<%= name %>"></c:set>
<c:set var="competistartdate" value="<%= startdate %>"></c:set>
<c:set var="competideadline" value="<%= deadline %>"></c:set>
<c:set var="competiwebsite" value="<%= website %>"></c:set>
<c:set var="competitermsnconds" value="<%= termsnconds %>"></c:set>
<sql:update>
INSERT INTO Competition (name, id_picture, id_sponsor, start_date, deadline, websiteURL, termsnconds) VALUES (?, ?, ?, ?, ?, ?, ?);
<sql:param value="${competiname}" />
<sql:param value="${picture.id}" />
<sql:param value="${sessionScope.userid}" />
<sql:param value="${competistartdate}" />
<sql:param value="${competideadline}" />
<sql:param value="${competiwebsite}" />
<sql:param value="${competitermsnconds}" />
</sql:update>
</c:forEach>
在竞赛中插入(姓名、id图片、id赞助商、开始日期、截止日期、网站URL、期限等)值(?,,,,,,,,,?);
但是我遇到了一个新问题,
type=“date”
的输入返回空值。。。我要检查一下,看看能不能买到什么东西。我找到了一种方法,现在它工作得很好
显然,当我上传.parseRequest时,多部分表单的所有参数都在里面,但我只得到上传的文件
为了获得其余的参数,我必须,首先,将它们插入到迭代器
对象中,然后,按照表单中先前给定的名称获取它们中的每一个
<%
String name = null ;
String startdate = null;
String deadline = null;
String website = null;
String termsnconds = null;
//Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
//Configure a repository (to ensure a secure temp location is used)
ServletContext servletContext = this.getServletConfig().getServletContext();
File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
factory.setRepository(repository);
//Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
//Parse the request
List<FileItem> items = upload.parseRequest(request);
Iterator<FileItem> iter = items.iterator();
while (iter.hasNext()) {
FileItem item = iter.next();
if (item.isFormField()) {
InputStream input = item.getInputStream();
if(item.getFieldName().equals("name")){
byte[] str = new byte[input.available()];
input.read(str);
name = new String(str,"UTF8");
}
if(item.getFieldName().equals("startdate")){
byte[] str = new byte[input.available()];
input.read(str);
startdate = new String(str,"UTF8");
}
if(item.getFieldName().equals("deadline")){
byte[] str = new byte[input.available()];
input.read(str);
deadline = new String(str,"UTF8");
}
if(item.getFieldName().equals("website")){
byte[] str = new byte[input.available()];
input.read(str);
website = new String(str,"UTF8");
}
if(item.getFieldName().equals("termsnconds")){
byte[] str = new byte[input.available()];
input.read(str);
termsnconds = new String(str,"UTF8");
}
} else {
item.write(new File("C:\\indigo\\eclipse\\workspace\\JSPyDB\\WebContent\\images\\competitions\\salida.png"));
}
}
//File.createTempFile(arg0, arg1)
%>
<sql:transaction dataSource="jdbc/PuzzleDB">
<sql:update>
INSERT INTO picture_competition (name, url) VALUES (?, ?)
<sql:param value="salida.png" />
<sql:param value="/competitions/" />
</sql:update>
<sql:query var="pictures">
SELECT id FROM picture_competition WHERE name=?
<sql:param value="salida.png" />
</sql:query>
<c:if test="${!empty pictures.rows}">
<c:forEach var="picture" items="${pictures.rows}">
<c:set var="competiname" value="<%= name %>"></c:set>
<c:set var="competistartdate" value="<%= startdate %>"></c:set>
<c:set var="competideadline" value="<%= deadline %>"></c:set>
<c:set var="competiwebsite" value="<%= website %>"></c:set>
<c:set var="competitermsnconds" value="<%= termsnconds %>"></c:set>
<sql:update>
INSERT INTO Competition (name, id_picture, id_sponsor, start_date, deadline, websiteURL, termsnconds) VALUES (?, ?, ?, ?, ?, ?, ?);
<sql:param value="${competiname}" />
<sql:param value="${picture.id}" />
<sql:param value="${sessionScope.userid}" />
<sql:param value="${competistartdate}" />
<sql:param value="${competideadline}" />
<sql:param value="${competiwebsite}" />
<sql:param value="${competitermsnconds}" />
</sql:update>
</c:forEach>
</c:if>
</sql:transaction>
在图片中插入竞争(名称、url)值(?,)
从图片_竞赛中选择id,其中名称=?
在竞赛中插入(姓名、id图片、id赞助商、开始日期、截止日期、网站URL、期限等)值(?,,,,,,,,,?);
您必须使用apache commons fileupload库获取所有参数,而不仅仅是文件。您不能混合使用request.getParameter
和${param.competitermsnconds}
因为您使用的是multipart/form data
…如果您尝试像普通方式一样获取参数,那么它将是null
,因为您只能通过fileupload库或请求来获取它。如果您使用的是servlet API 3.0,那么您确实应该将其设置为servlet。您不应该在jsp中进行数据库更新。谢谢develioerwjk,我知道用它来创建servlet更好,但我必须在低于3.0的版本中完成,在整个过程中使用apache commons文件上传的servlet。i、 e.if(item.isFormField()){
那里有您的非文件字段。
<c:forEach var="picture" items="${pictures.rows}">
<c:set var="competiname" value="<%= name %>"></c:set>
<c:set var="competistartdate" value="<%= startdate %>"></c:set>
<c:set var="competideadline" value="<%= deadline %>"></c:set>
<c:set var="competiwebsite" value="<%= website %>"></c:set>
<c:set var="competitermsnconds" value="<%= termsnconds %>"></c:set>
<sql:update>
INSERT INTO Competition (name, id_picture, id_sponsor, start_date, deadline, websiteURL, termsnconds) VALUES (?, ?, ?, ?, ?, ?, ?);
<sql:param value="${competiname}" />
<sql:param value="${picture.id}" />
<sql:param value="${sessionScope.userid}" />
<sql:param value="${competistartdate}" />
<sql:param value="${competideadline}" />
<sql:param value="${competiwebsite}" />
<sql:param value="${competitermsnconds}" />
</sql:update>
</c:forEach>
<%
String name = null ;
String startdate = null;
String deadline = null;
String website = null;
String termsnconds = null;
//Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
//Configure a repository (to ensure a secure temp location is used)
ServletContext servletContext = this.getServletConfig().getServletContext();
File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
factory.setRepository(repository);
//Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
//Parse the request
List<FileItem> items = upload.parseRequest(request);
Iterator<FileItem> iter = items.iterator();
while (iter.hasNext()) {
FileItem item = iter.next();
if (item.isFormField()) {
InputStream input = item.getInputStream();
if(item.getFieldName().equals("name")){
byte[] str = new byte[input.available()];
input.read(str);
name = new String(str,"UTF8");
}
if(item.getFieldName().equals("startdate")){
byte[] str = new byte[input.available()];
input.read(str);
startdate = new String(str,"UTF8");
}
if(item.getFieldName().equals("deadline")){
byte[] str = new byte[input.available()];
input.read(str);
deadline = new String(str,"UTF8");
}
if(item.getFieldName().equals("website")){
byte[] str = new byte[input.available()];
input.read(str);
website = new String(str,"UTF8");
}
if(item.getFieldName().equals("termsnconds")){
byte[] str = new byte[input.available()];
input.read(str);
termsnconds = new String(str,"UTF8");
}
} else {
item.write(new File("C:\\indigo\\eclipse\\workspace\\JSPyDB\\WebContent\\images\\competitions\\salida.png"));
}
}
//File.createTempFile(arg0, arg1)
%>
<sql:transaction dataSource="jdbc/PuzzleDB">
<sql:update>
INSERT INTO picture_competition (name, url) VALUES (?, ?)
<sql:param value="salida.png" />
<sql:param value="/competitions/" />
</sql:update>
<sql:query var="pictures">
SELECT id FROM picture_competition WHERE name=?
<sql:param value="salida.png" />
</sql:query>
<c:if test="${!empty pictures.rows}">
<c:forEach var="picture" items="${pictures.rows}">
<c:set var="competiname" value="<%= name %>"></c:set>
<c:set var="competistartdate" value="<%= startdate %>"></c:set>
<c:set var="competideadline" value="<%= deadline %>"></c:set>
<c:set var="competiwebsite" value="<%= website %>"></c:set>
<c:set var="competitermsnconds" value="<%= termsnconds %>"></c:set>
<sql:update>
INSERT INTO Competition (name, id_picture, id_sponsor, start_date, deadline, websiteURL, termsnconds) VALUES (?, ?, ?, ?, ?, ?, ?);
<sql:param value="${competiname}" />
<sql:param value="${picture.id}" />
<sql:param value="${sessionScope.userid}" />
<sql:param value="${competistartdate}" />
<sql:param value="${competideadline}" />
<sql:param value="${competiwebsite}" />
<sql:param value="${competitermsnconds}" />
</sql:update>
</c:forEach>
</c:if>
</sql:transaction>