Javascript 如何创建一个;“添加到日历中”;iCal从服务器数据链接(.ics文件)并将其发送回我的webApp?

Javascript 如何创建一个;“添加到日历中”;iCal从服务器数据链接(.ics文件)并将其发送回我的webApp?,javascript,jquery,jersey,jax-rs,Javascript,Jquery,Jersey,Jax Rs,我正在做一些原型设计,我希望有人能帮助我。我正在尝试创建一个addevent to calendar链接,该链接将下载并打开一个iCal文件(.ics),以便他们可以将其添加到日历中 我们使用Jax-RS和Jersey以及tomcat作为容器,我有iCal4j包。客户端是jQuery/backbone 我不确定返回数据的正确方式。如果我应该创建一个ics文件并在返回之前将其存储在某个地方,或者从iCal4j发回CalendarOutputer文件流 如果我创建了一个ics文件,我应该把它存储在哪

我正在做一些原型设计,我希望有人能帮助我。我正在尝试创建一个
addevent to calendar
链接,该链接将下载并打开一个iCal文件(.ics),以便他们可以将其添加到日历中

我们使用Jax-RS和Jersey以及tomcat作为容器,我有
iCal4j
包。客户端是jQuery/backbone

  • 我不确定返回数据的正确方式。如果我应该创建一个ics文件并在返回之前将其存储在某个地方,或者从iCal4j发回CalendarOutputer文件流
  • 如果我创建了一个ics文件,我应该把它存储在哪里?WEB-INF文件夹?怎么做
  • 如果返回文件流,那么Jax-RX的正确@products(?)是什么
  • 谢谢,
    光线

    您不应该创建文件来返回数据。您应该能够直接返回日历对象。尝试以下方法:

    @GET
    @Path("calendar")
    @Produces("text/calendar")
    public Response generateCalendar() {
      Calendar calendar = new Calendar();
      // Generate your calendar here
      ResponseBuilder builder = Response.ok();
      builder.header("content-disposition", "attachment;filename=calendar.ics");
      builder.entity(calendar.toString());
      return builder.build();
    }
    

    您不应该创建文件来返回数据。您应该能够直接返回日历对象。尝试以下方法:

    @GET
    @Path("calendar")
    @Produces("text/calendar")
    public Response generateCalendar() {
      Calendar calendar = new Calendar();
      // Generate your calendar here
      ResponseBuilder builder = Response.ok();
      builder.header("content-disposition", "attachment;filename=calendar.ics");
      builder.entity(calendar.toString());
      return builder.build();
    }
    

    如果你想继续穿球衣,那是个好办法。但实际上,这种实现忽略了Jersey的大部分功能。您最好只制作一个servlet,将响应类型设置为text/calendar或其他iCal的mime类型,抓取servlet编写器并通过它编写iCal文件内容。谢谢@user463324。现在我返回“calendar.toString()”,知道如何将其转换为.ics文件以供下载吗?我会更新我的答案,使其更改
    内容配置。如果按照@Shivan的建议使用servlet,您可以做类似的事情……知道我如何处理jQuery端吗?我已经按照你的建议做了(我以前在另一篇文章中也看到过),但是我无法获得“文件保存”弹出窗口?我在某个地方读到,我不应该使用ajax调用?我想,我找到了答案:
    document.location=url+'似乎可以正常工作。哦,我们坚持使用jersey,因为这只是应用程序的一小部分。谢谢你的帮助!如果你想继续穿球衣,那是个好办法。但实际上,这种实现忽略了Jersey的大部分功能。您最好只制作一个servlet,将响应类型设置为text/calendar或其他iCal的mime类型,抓取servlet编写器并通过它编写iCal文件内容。谢谢@user463324。现在我返回“calendar.toString()”,知道如何将其转换为.ics文件以供下载吗?我会更新我的答案,使其更改
    内容配置。如果按照@Shivan的建议使用servlet,您可以做类似的事情……知道我如何处理jQuery端吗?我已经按照你的建议做了(我以前在另一篇文章中也看到过),但是我无法获得“文件保存”弹出窗口?我在某个地方读到,我不应该使用ajax调用?我想,我找到了答案:
    document.location=url+'似乎可以正常工作。哦,我们坚持使用jersey,因为这只是应用程序的一小部分。谢谢你的帮助!