首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向JSF Web应用程序添加PWA支持

向JSF Web应用程序添加PWA支持
EN

Stack Overflow用户
提问于 2020-03-05 20:47:16
回答 3查看 715关注 0票数 2

我正在尝试评估是否有可能将渐进式Web应用程序支持添加到JavaServerFaces web应用程序中。我们的JSF应用程序多年来一直在增长,未来可能的需求可能是使应用程序的某些部分可供脱机使用。除了PWA功能提供的其他很好的功能(通知、全屏web应用程序、添加到主屏幕等)外,我们主要对PWA与服务工作者和缓存似乎提供的离线功能感兴趣。

我们的客户必须在有时没有互联网连接的地区工作。在这种情况下,理想情况下,他们应该能够访问应用程序,对自己进行身份验证,并导航到需要即时使用的应用程序部分。在应用程序的这一部分,他们将操作或创建新的数据集。如果我得到的信息是正确的,那么理论上可以使用PWA服务工作者缓存数据,甚至存储新创建或更新的数据,以便稍后与服务器同步。真的是这样吗?

虽然PWA支持的想法似乎很好,但我严重怀疑在JSF应用程序中实现特别是离线模式功能的可能性,因为所有应用程序逻辑基本上都在服务器端,客户端不会直接调用API来获取/POST/PUT/etc(因此缓存和同步)数据。

到目前为止,我的研究没有产生任何实质性的结果(JSF和PWA),这就是我发布这个问题的原因。如果有人能给我指出正确的方向,或者给我一个答案,如果JSF应用程序可以利用PWA技术,特别是离线/缓存/同步功能,那就太好了。

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2020-05-16 01:38:18

我正在评估相同的技术,就目前而言,jsf确实不太适合脱机功能。额外的障碍是(特别是在ios上)有时决定应该清理cookies/localstorage,因为如果不活动,当用户试图恢复时,这会破坏视图。我们正在尝试将代码移动到jax-rs端点。

票数 2
EN

Stack Overflow用户

发布于 2021-04-22 04:35:20

从3.7版本开始,OmniFaces通过内置的PWAResourceHandler在一定程度上增加了对PWA的支持。其用法在showcase中有详细的文档记录和演示。

  1. 首先创建一个从WebAppManifest扩展的类

公共类YourWebAppManifest扩展了WebAppManifest { }

  1. 为它提供了一个与其状态匹配的CDI作用域注释,例如@ApplicationScoped

@ApplicationScoped公共类YourWebAppManifest扩展了WebAppManifest { }

W3 spec中,

  1. Override/implement属性符合其Javadoc和规则。

@ApplicationScoped公共类YourWebAppManifest扩展WebAppManifest { @Override公共字符串getName() { return“您的应用”;} @Override公共集合getIcons() { Arrays.asList( ImageResource.of("logo.svg"),ImageResource.of("logo-120x120.png",Size.SIZE_120),ImageResource.of("logo-180x180.png",Size.SIZE_180),ImageResource.of("logo-192x192.png",Size.SIZE_192),徽标(“ImageResource.of-512x512.png”,Size.SIZE_512 );} @Override公共字符串getOfflineViewId() { return "/offline.xhtml";} }

使用确切的库名manifest.json和资源名manifest.json

  1. 在HTML头中引用它,如下所示

基本上就是这样。PWAResourceHandler将自动生成所需的manifest.jsonsw.js文件,并将/offline.xhtml模板用作脱机视图。

默认情况下,web.xml中的所有<welcome-file>条目都注册为“可缓存资源”,也就是说,它们也可以脱机使用。您可以在自定义WebAppManifest中覆盖它,如下所示:

代码语言:javascript
复制
@Override
public Collection<String> getCacheableViewIds() {
    return Arrays.asList("/index.xhtml", "/contact.xhtml", "/support.xhtml");
}

您可能还希望通过使用<f:view transient="true">使这些页面中的所有JSF表单成为stateless,这样它们就不会抛出ViewExpiredException

这种PWAResourceHandler的主要优点是您不需要手动构建sw.js,只需通过一个简单的CDI bean就可以控制它的内容/配置。

票数 2
EN

Stack Overflow用户

发布于 2021-04-21 23:12:45

我一直在看类似的东西。(虽然我现在是PWAs的新手)它应该是相对简单的,JSF最终是一个标记库,它首先通过servlet进行过滤。您可以轻松地定义标记来呈现所需的任何内容。

但我的感觉是,各种插件主题和组件库可能并不是以一种与PWA思想兼容的方式制作的。我的怀疑是,我需要从计划JSF开始,并制作一个原型。

所以我实际上追溯到了JSTL。一旦我对这些模式有了足够的了解,就可以制作一些标记库,我应该能够理解它在JSF中是如何工作的。(我最后一次涉足web开发时,为了充分披露,JSTL是新的,但基础仍然是基础)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60545766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档