上传数据的时候form应该写成类似如下形式:
<form action="InputResp" ENCTYPE="multipart/form-data" method="post">
<form action="InputResp" ENCTYPE="multipart/form-data" method="post">
解决方案 »
- java 静态变量作为缓存的问题
- webservices 错误 org.xml.sax.SAXException 新手求救!!~~~
- 软件比赛选题
- CSDN出错啦:无缘无故被“监禁”了,郁闷的又跑去注册一个CSDN,结果填写完整资料时一直报:未将对象引用设置到对象的实例......无语。
- 一个常识性的小问题,所以给分很少,请见谅
- 求ssh框架购物系统
- web自动化嗅探下载器的设计
- spring mvc demo运行失败,求大神帮忙看看~~~
- 请教一下关于通过JDBC连接MYSQL的问题
- 哪有ipedo/tamino等原生XML数据库的技术资料
- 高分求助!struts 中如何下载文件?
- 请问大家在工作中struts和taglib用的多不?
> 1.01. Is this behaviour a bug or is it how Struts is meant to work?
> Also can someone please tell me what setting
> the value of redirect="true" does besides clearing the request attributes.
我也在apache的maillist里看过这个topic,看来还不是我一个人遇到,而且在1.1里也没有解决。to:zxl19790710(雪龙),yujinping(JavaFan) ,不只是传两个action,我传4个呢。三个xml文件上传上来,解析,审核,再调用后台ejb,你们认为放到1个action里做???????
to:Lihaitao312(李海涛)
没有解决,但我用别的方法饶开了这个问题,改动如下
<action-mappings>
<!-- Upload Action -->
<action path="/upload"
type="org.apache.struts.webapp.upload.UploadAction"
name="uploadForm">
<forward name="display" path="/upload2.do" />
</action>
<action path="/upload2"
type="org.apache.struts.webapp.upload.UploadAction">
<forward name="display" path="/display.jsp" />
</action>
</action-mappings>
然后你在第二个action里会发现request中有个叫uploadForm的属性,里边就是我们想要的东西。注意所有后续action都不能声明form,否则异常。
这种方法虽然能解决问题,但总感觉不是struts的风格,不那么自然。
如果/upload和/upload2都定义了Form,request.getInputStream()中的上传数据在ActionServlet处理Action "/upload"时就读完了,在处理Action "/upload2"时又尝试从request.getInputStream()中取上传数据,当然会取不到了。
如果/upload定义Form,而/upload2不定义Form,由于处理/upload时,Form实例已经放到request的attributes中了,所以在/upload2中可以通过request.getAttribute(formName)取到Form实例。表达能力有限,请参考struts中以下class的源代码:
class org.apache.struts.action.ActionServlet
process(HttpServletRequest request, HttpServletResponse response)
processPopulate(ActionForm formInstance, ActionMapping mapping, HttpServletRequest request)class org.apache.struts.util.RequestUtils
populate(Object bean, String prefix, String suffix, HttpServletRequest request)class orgapache.struts.upload.MultipartIterator
楼主根据你所说第二个action应当是解析,为什么还要upload,而不是通过已存在的文件直接解析呢
我感觉是在action2的form初始化的时候struts对multipart/form-data考虑的不周全,用MultipartIterator读request来初始化form的数据,request的数据在别的content-type可以一直保存,但stream类型的数据就只能用一次,所以导致forward到第二个action时候,如果定义了form就会读取错误。应该是如果是multipart/form-data类型,在读出以后放在request的属性中,forward以后从request的属性中初始化form,而不是再次从request中取得。至于struts是以什么样的方式传递的数据,struts并没有具体说明,我也是遍历了request的属性才发现的,而且key值也没有写明命名方式,是struts的内部实现。感觉这么用是饶开了struts,并不很好,你有什么自然的方式吗?to:zxl19790710(雪龙),我的文件并不在服务器保存是直接解析然后向后传递的。
<action path="/upload"
type="org.apache.struts.webapp.upload.UploadAction"
name="uploadForm">
<forward name="display" path="/upload2.do" />
</action>
在这个定义中,"uploadForm"即是Form的key。参考:
ActionServlet的processActionForm方法。