Java Struts2从struts.xml文件执行一个操作的多个结果
我想从struts.xml文件中运行两个操作结果,只需单击表单上的提交按钮。这可能吗?如果可能,如何实现?下面我举一个简短的例子: 点击表单上的“我的提交”按钮后,struts2中是否仍有运行操作结果成功\u csv并使用结果成功重新加载页面 我在我的index.jsp上有一个表单,例如:Java Struts2从struts.xml文件执行一个操作的多个结果,java,xml,jsp,struts2,Java,Xml,Jsp,Struts2,我想从struts.xml文件中运行两个操作结果,只需单击表单上的提交按钮。这可能吗?如果可能,如何实现?下面我举一个简短的例子: 点击表单上的“我的提交”按钮后,struts2中是否仍有运行操作结果成功\u csv并使用结果成功重新加载页面 我在我的index.jsp上有一个表单,例如: <form id="example" name="example" action="makecsv" > <!-- form sutff --> <input class="s
<form id="example" name="example" action="makecsv" >
<!-- form sutff -->
<input class="submit" type="submit" value="Submit" >
</form>
现在它只提供了csv文件,我希望它也能打开index.jsp在jsp中使用listentopics和notifyTopic 有关listentopics和notifyTopic语法,请访问以下链接
将listentopic添加到表单中,在下载文件链接上说“filecomplete”,写下notifytopic“triggerFilecomplete”,这将触发表单提交。在考虑Struts2之前,从浏览器的角度问自己,从更高的层次上看,您希望发生什么-回想一下浏览器发出请求,它只需要响应(html页面或som其他内容) 如果您想要请求返回html结果页,然后(自动)开始下载的行为,请阅读(注意,顺便说一句,总是有两个请求。) 只有在这一步之后,当您决定了要实现什么时,才考虑如何实现它——也就是说,考虑如何使用Struts实现它 例如,我认为您的“first”操作生成稍后下载的文件,将其保存在临时位置(连同一些安全id),并返回html页面作为结果。该页面包含对新请求的引用(通过元刷新、javascript、iframe或其他方式——可能还有一个带有典型“如果几秒钟内没有开始下载,请单击此处”的显式链接),以hte文件的id作为参数。
此请求命中第二个操作,该操作接收文件id,并将其作为二进制结果返回。您不能流式传输图像,同时显示HTML页面
我能想出的一个解决方案是使用javascript在新窗口中打开图像。不,您不能对一个HTTP请求提交两个响应。gnanz提供的解决方案可能适合您。
<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>
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";
}
}