1

我正在编写一个以 rap 1.4 作为 rap 部分的目标平台的 RCP/RAP-App。在 rcp 中,我通过 plugin.xml 中的 menuContribution 配置了一个保存按钮,并为保存命令配置了一个相应的 SaveHandler。现在我喜欢将此按钮用作我的说唱应用程序中的下载按钮。

4

1 回答 1

2

我懂了。
我编写了一个 DownloadServiceHandler 并在我的保存命令处理程序中创建了一个带有下载 URL 的不可见浏览器。
所有的工作一步一步:
工具栏中的保存按钮在plugin.xml中配置:

    <extension
         point="org.eclipse.ui.commands">
      <command
            id="pgui.rcp.command.save"
            name="Save">
      </command>
   </extension>
   <extension
         point="org.eclipse.ui.menus">
      <menuContribution
            allPopups="false"
            locationURI="toolbar:org.eclipse.ui.main.toolbar">
         <toolbar
               id="pgui.rcp.toolbar1">
            <command
                  commandId="pgui.rcp.command.save"
                  icon="icons/filesave_16.png"
                  id="pgui.rcp.button.save"
                  style="push"
            </command>
         </toolbar>
      </menuContribution>
   </extension>
   <extension
         point="org.eclipse.ui.handlers">
      <handler
            class="pgui.handler.SaveHandler"
            commandId="pgui.rcp.command.save">
      </handler>
   </extension>

我创建了一个 DownloadServiceHandler:

public class DownloadServiceHandler implements IServiceHandler
{
  public void service() throws IOException, ServletException
  {
    final String fileName = RWT.getRequest().getParameter("filename");
    final byte[] download = getYourFileContent().getBytes();
    // Send the file in the response
    final HttpServletResponse response = RWT.getResponse();
    response.setContentType("application/octet-stream");
    response.setContentLength(download.length);
    final String contentDisposition = "attachment; filename=\"" + fileName + "\"";
    response.setHeader("Content-Disposition", contentDisposition);
    response.getOutputStream().write(download);
  }
}

在 ApplicationWorkbenchWindowAdvisor 的 postWindowCreate 方法中,我注册了 DownloadServiceHandler:

private void registerDownloadHandler()
  {
    final IServiceManager manager = RWT.getServiceManager();
    final IServiceHandler handler = new DownloadServiceHandler();
    manager.registerServiceHandler("downloadServiceHandler", handler);
  }

在 SaveHandler 的执行方法中,我创建了一个不可见的浏览器,并使用文件名和注册的 DownloadServiceHandler 设置 url。

  final Browser browser = new Browser(shell, SWT.NONE);
    browser.setSize(0, 0);
    browser.setUrl(createDownloadUrl(fileName));
       .
       .
  private String createDownloadUrl(final String fileName)
  {
    final StringBuilder url = new StringBuilder();
    url.append(RWT.getRequest().getContextPath());
    url.append(RWT.getRequest().getServletPath());
    url.append("?");
    url.append(IServiceHandler.REQUEST_PARAM);
    url.append("=downloadServiceHandler");
    url.append("&filename=");
    url.append(fileName);
    return RWT.getResponse().encodeURL(url.toString());
  }
于 2012-07-26T13:29:03.603 回答