为什么在有<inputt type="file">时<input type="text">提交后,取到的总是空值
<formaction="do.jsp"method="post"enctype="multipart/form-data"><inputtpye="text"name=...
<form action="do.jsp" method="post" enctype="multipart/form-data">
<input tpye="text" name="name"/>
<input type="file" />
<input type="sumbmit" value="submit">
</form>
然后在do.jsp里面有个String time=request.getParameter("time")
提示time是空值
上面写错了
不好意思由于是自己敲的,菜了点。请忽略拼写错误
第一个<input>应该是<input tpye="text" name="time"/>!!!!!! 展开
<input tpye="text" name="name"/>
<input type="file" />
<input type="sumbmit" value="submit">
</form>
然后在do.jsp里面有个String time=request.getParameter("time")
提示time是空值
上面写错了
不好意思由于是自己敲的,菜了点。请忽略拼写错误
第一个<input>应该是<input tpye="text" name="time"/>!!!!!! 展开
展开全部
本人一个中级JAVA工程师,我们一起来分析分析问题:
首先,我们去掉enctype="multipart/form-data",让表单以标准数据格式传输数据,你会惊奇的发现time的值能取到。所以time取值为空,并非<inputt type="file">的问题。
然后,我们看看enctype="multipart/form-data"是什么东西,文件和字符串不同,文件要用二进制数据传送。这下问题来了,用了enctype="multipart/form-data",能传文件,但不能传入输入框的值。不用又不能传文件。麻烦,这里一般我们要用组件,就是别人写好的jar包里的类的方法,比如JspSmartUpload、commons-fileupload等等。
最后,如果你对JAVA非常感兴趣,并且有不弄清根本原因不罢休的精神的话,请看下面。
------------------------------------------------------------------
<%
String time = request.getParameter("time");
InputStream is = request.getInputStream();
byte[] b = new byte[120];
is.read(b);
%>
<body>
<%=time %> <br>
<%=new String (b,"ISO-8859-1")%>
</body>
这是我写的测试程序。首先我们加上enctype="multipart/form-data",你会发现time总是空,然后下面一行是解析出表单的2进制数据,我已转换为字符串。
去掉enctype="multipart/form-data",能得到time的值,但是下面一行为空,因为request.getParameter 和 request.getInputStream只能有一个生效,如果注释掉第一行String time = request.getParameter("time")的话,第二行会出现解析出表单的2进制数据。
所以JSP的机制很明显了,加上enctype="multipart/form-data"后只能从InputStream也就是流里面读取数据了,需要自己编写解析字符串的方法把time的值InputStream从提取出来,这比较复杂了,不过现在的你不必了解太深,而且现在的很多组件,如上面提到的JspSmartUpload、commons-fileupload等等,已经帮我们写好了方法,你就先放心用着,随着学习的深入,你会慢慢了解这些方法是如何编写实现的。
首先,我们去掉enctype="multipart/form-data",让表单以标准数据格式传输数据,你会惊奇的发现time的值能取到。所以time取值为空,并非<inputt type="file">的问题。
然后,我们看看enctype="multipart/form-data"是什么东西,文件和字符串不同,文件要用二进制数据传送。这下问题来了,用了enctype="multipart/form-data",能传文件,但不能传入输入框的值。不用又不能传文件。麻烦,这里一般我们要用组件,就是别人写好的jar包里的类的方法,比如JspSmartUpload、commons-fileupload等等。
最后,如果你对JAVA非常感兴趣,并且有不弄清根本原因不罢休的精神的话,请看下面。
------------------------------------------------------------------
<%
String time = request.getParameter("time");
InputStream is = request.getInputStream();
byte[] b = new byte[120];
is.read(b);
%>
<body>
<%=time %> <br>
<%=new String (b,"ISO-8859-1")%>
</body>
这是我写的测试程序。首先我们加上enctype="multipart/form-data",你会发现time总是空,然后下面一行是解析出表单的2进制数据,我已转换为字符串。
去掉enctype="multipart/form-data",能得到time的值,但是下面一行为空,因为request.getParameter 和 request.getInputStream只能有一个生效,如果注释掉第一行String time = request.getParameter("time")的话,第二行会出现解析出表单的2进制数据。
所以JSP的机制很明显了,加上enctype="multipart/form-data"后只能从InputStream也就是流里面读取数据了,需要自己编写解析字符串的方法把time的值InputStream从提取出来,这比较复杂了,不过现在的你不必了解太深,而且现在的很多组件,如上面提到的JspSmartUpload、commons-fileupload等等,已经帮我们写好了方法,你就先放心用着,随着学习的深入,你会慢慢了解这些方法是如何编写实现的。
参考资料: 看看我帮别人解决的java问题。完全原创
展开全部
enctype="multipart/form-data"它的意思是以二进制的数据格式来传输,所以传输到你的jsp里是二进制数据,包括那个time,所以你用request.getParameter("time")是得不到值的,必须把数据再换为String的.
到网上搜下enctype="multipart/form-data"取不到表单值的解决办法有很多.
到网上搜下enctype="multipart/form-data"取不到表单值的解决办法有很多.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的form表单里面没有time这个组件呀。
加一个<input type=text name="time" value="2010">再试试?
加一个<input type=text name="time" value="2010">再试试?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
sumbmit 貌似拼错了 submit
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
恩 提交写错了submit
加个id试试
加个id试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询