我希望从表单上的提交按钮中单击一下,从struts.xml文件运行两个操作结果。这是可能的,如果是这样的话怎么样?我在下面有一个简短的例子:
在我的表单上点击我的提交按钮后,无论如何在struts2中运行结果 success_csv 并重新加载结果成功的页面
我的 index.jsp 上有一个表单,例如:
<form id="example" name="example" action="makecsv" >
<!-- form sutff -->
<input class="submit" type="submit" value="Submit" >
</form>
在我的 strut.xml 文件中,我有以下操作:
<action name="makecsv" class="com.example.actions.MakecsvAction">
<result name="success_csv" type="stream">
<param name="contentType">image/jpeg</param>
<param name="inputName">fileStream</param>
<param name="contentDisposition">attachment;filename="${filename}"</param>
<param name="bufferSize">1024</param>
</result>
<result name="success"> index.jsp </result>
</action>
操作结果success_csv将流出用户可以保存或打开的文件。操作结果成功将打开index.jsp。
我的操作文件 MackcsvAction.java :
public class RegisterAction extends ActionSupport
{
public String execute() throws Exception
{
//blahblah code that creates csv file
//sets the filename and fileStream of the file
return "succes_csv";
}
}
现在它只提供了我想要的csv文件来打开index.jsp
答案 0 :(得分:1)
在考虑Struts2之前,请从浏览器的角度问问自己,您希望从更高级别发生什么 - 回想一下浏览器发出请求,并且它只需要一个响应(一个html页面或者som其他内容) )。
如果您想要请求返回html结果页面的行为然后(自动)开始下载,请阅读that kind of pattern.(注意,顺便说一下,总有两个请求。)
只有在这一步之后,当你决定要发生什么时,想想你将如何实现它 - 即想想如何用Struts实现它。
例如,我会说你的“第一个”动作生成要稍后下载的文件,将其保存在临时位置(连同一些安全ID),并返回html页面作为结果。该页面包含对新请求的引用(通过元刷新,javascript,iframe或其他任何内容 - 也可能是典型的'如果您的下载无法在几秒钟内启动,请单击此处')与hte文件的id作为参数。 此请求命中第二个操作,该操作接收文件ID,并将其作为二进制结果返回。
答案 1 :(得分:0)
在Jsp中使用listentopics和notifyTopic
访问以下链接了解listentopics和notifyTopic语法
http://struts.apache.org/2.0.11/docs/struts-2-spring-2-jpa-ajax.html
添加listentopic以形成说“filecomplete”在下载文件链接写notifytopic“triggerFilecomplete”这将触发表单提交。
答案 2 :(得分:0)
您无法流式传输图像,同时显示HTML页面。
我能想到的一个解决方案是使用javascript在新窗口中打开图像。