Struts2从struts.xml文件中执行一个操作的多个结果

时间:2011-05-23 14:39:41

标签: java xml jsp struts2

我希望从表单上的提交按钮中单击一下,从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

3 个答案:

答案 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在新窗口中打开图像。