JSF生命周期问题,responseComplete()的BUG?

yexinjia8 2008-12-05 12:26:24
在jsf页面的文件打开组件
<h:outputText value="原文:"/>
<h:commandLink title="#{Taskprogress.originaltext}" styleClass="uploadFile" action="#{Taskprogress.openOriginalFile}">
<h:outputText id="originaltext" value="#{Taskprogress.originaltext}"> </h:outputText>

</h:commandLink>
当我点击链接的时候,跳出文件对话框,执行保存,打开,或者取消操作后,我再保存当面页面,但是又会跳出文件下载对话框,action源码如下:
public static void openFile(String fileName,String subDir)
{
try
{
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
if(FacesContext.getCurrentInstance().getResponseComplete())return;
if (!subDir.equals("")) subDir = subDir + "\\";
fileName = request.getRealPath("upload")+"\\" + subDir + fileName;
java.io.File f = new java.io.File(fileName);
if (f.exists()&&f.canRead())
{

response.setContentType ("application/x-msdownload octet-stream;charset=ISO8859-1");
response.setHeader ("Content-Disposition", "attachment;filename=\"" + new String(f.getName().getBytes(), "ISO8859-1") + "\"");
// response.setContentLength((int) f.length());
java.io.BufferedInputStream fileInputStream = new java.io.BufferedInputStream(new java.io.FileInputStream(f));

int i;
// java.io.OutputStream out = response.getOutputStream();
java.io.PrintWriter out = response.getWriter();
// out.clearBuffer();
while ((i=fileInputStream.read()) != -1) out.write(i);
fileInputStream.close();
out.flush();
out.close();
FacesContext.getCurrentInstance().responseComplete();
}

} catch (IOException e) {
e.printStackTrace();
}

// String fileType = fileName.substring(fileName.lastIndexOf(".")+1);
// if (fileType.equals("doc"))
// openWordFile(fileName);
// else if (fileType.equals("xls"))
// openExcelFile(fileName);
}
为什么不能结束本次请求?想半天了,麻烦指点指点!
...全文
241 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
化繁为简2007 2009-02-25
  • 打赏
  • 举报
回复
???
jeanissong 2008-12-09
  • 打赏
  • 举报
回复
现在应该不会了
hawaiiboys 2008-12-09
  • 打赏
  • 举报
回复
帮顶下

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧