当前位置: 首页 > 面试题库 >

ICEfaces库在类路径中可防止“另存为”对话框在文件下载时弹出

戚令秋
2023-03-14
问题内容

一旦将库icefaces.jar icepush.jar
icefaces_ace.jar添加到我的类路径中以使用ACE组件,我的“另存为”对话框将不会弹出?我不确定这是否是错误,但是在classpath中没有库就可以了。这是我的另存为方法:

    public void downloadFile(String propertyPath) throws IOException {

     ProxyFile fileToDownload = repBean.downloadFile(propertyPath);

     FacesContext facesContext = FacesContext.getCurrentInstance();
     ExternalContext externalContext = facesContext.getExternalContext();
     HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();

     response.reset();         response.setContentType(fileToDownload.getContentType()); 
     response.setHeader("Content-Length", String.valueOf(fileToDownload.getLength()));
     response.setHeader("Content-disposition", "attachment; filename=\"" + fileToDownload.getName() + "\"");

     BufferedInputStream input = null;
     BufferedOutputStream output = null;


     try {
         input = new BufferedInputStream(fileToDownload.getContent());
         output = new BufferedOutputStream(response.getOutputStream());

         byte[] buffer = new byte[10240];
         for (int length; (length = input.read(buffer)) > 0;) {
            output.write(buffer, 0, length);
         }
     } finally {
         output.close();
         input.close();
         facesContext.responseComplete(); 
        }
     }

问题答案:

您不能使用ajax下载文件。

Ajax在JavaScript
XMLHttpRequest对象执行的幕后。该请求将被成功执行,并且响应将被成功检索。但是,JavaScript无法将响应写到客户端的磁盘文件系统,也不能对给定的响应进行“
另存为” 对话框。那将是一个巨大的安全漏洞。

您的具体问题的原因是ICEfaces本身。即,当您将ICEfaces集成到JSF
Web应用程序中时,所有标准<h:commandXxx>链接/按钮都将默默地转换为启用了Ajax的链接/按钮,这确实在启动程序之间引起混淆。确保未使用ICEfaces引入的ajax工具隐式下载链接/按钮。按照他们在主题上的Wiki页面,您需要显式嵌套a
<f:ajax disabled="true">来禁用此功能。

禁用组件的Ajax

您还可以在单​​个组件级别禁用Ajax:

<h:commandButton value="Send" actionListener="#{bean.sendMessage}">
    <f:ajax disabled="true"/>
</h:commandButton>

将其应用于您的下载链接/按钮。



 类似资料:
  • 问题内容: 有没有可以让我在Firefox中操纵文件下载对话框的API?(我想访问用户做某事时显示的内容,而不是自己发起)。 我想做的是从Selenium访问此对话框(我不确定Selenium的“特权模式”是否足以访问chrome接口)。 问题答案: 从来没听说过。但是您可以将Firefox配置为自动开始下载并将文件保存在特定位置。然后,您的测试可以检查文件是否实际到达。

  • 我有一个上下文菜单,它包含一个带有一些控件的CustomMenuItem。单击按钮时,会自动显示对话框和隐藏上下文菜单。问题是:我想在对话框显示时阻止关闭上下文菜单。我该如何解决这个问题呢? 我已经追踪到这件事了。当对话框打开时,将触发一个FocusUngrabEvent.Focus_Ungrab事件,该事件在PopupWindow中处理。我已经尝试在FocusUngrabEvent.Focus_

  • 我有一个C#桌面应用程序,它通过一个web浏览器控件连接到一个站点。问题是我需要导航到一个特定的部分并下载一个从回发生成的excel文件。我想自动执行这个过程,或者绕过文件下载对话框,直接将文件保存到本地驱动器。问题链接不是标准URL。站点使用回发脚本获取所需的文件,然后显示“文件下载”对话框。例如。当您单击按钮(javascript:postback)时,文件下载对话框将自动加载。 如前所述,我

  • 我正在开发outlook web加载项(上下文),用户可以在其中下载特定文件。我现在面临的问题是,我无法在Outlook for desktop内强制另存为对话框(在web中,它工作得很好)。所以请考虑以下简单的HTML: 我的问题是-是否可以在Outlook中调用“另存为对话框”以供桌面使用?如果不是-如果URL的域与外接程序的域相同,是否可以在新默认浏览器的选项卡中打开链接? 附注。我尝试了官

  • 问题内容: 假设我已经使用Groovyc编译了Groovy脚本,该脚本已在文件系统中生成了一个或多个.class文件。如何从Java应用程序动态地将这些类添加到类路径中,以加载它们并调用它们的方法?目标是预编译Groovy脚本并将其存储到数据库中,以便可以从脚本的编译版本执行评估。 问题答案: 您可以创建URLClassLoader的实例以从目录加载新类: 第1 行将.class 创建到.clas

  • 我正在使用上传文件。如果用户启动打开文件对话框(使用Uploadify选择文件按钮),则会出现一个窗口,用户可以在其中导航到他的路径并选择应上传的文件。现在,Internet Explorer 不存储路径。如果用户再次单击选择文件按钮,他必须再次导航到所需的文件夹。 我知道用户可以一次上传多个文件,但我被问及是否可以存储路径以供下次使用(例如Firefox的行为)。当然,他可以使用另一个浏览器,但