【问题标题】:SPA approach not working if page contains b:carousel如果页面包含 b:carousel,则 SPA 方法不起作用
【发布时间】:2023-12-28 14:06:01
【问题描述】:

环境:

我正在编写一个使用 JSF2.2、Bootsfaces 0.9.1、Primefaces 6.0、JEE7 和 Hibernate 5.2 以及 MySQL 5.7 DB 的 SPA。

我有什么:

我的 SPA 在上部有一个导航栏,在左侧有一个基于导航栏选择的特定菜单。在右侧和导航栏下方,我有我的主要“内容页面”。与这张图片类似,但区别在于我的菜单是动态的

为了更新我正在使用 AJAX 的内容页面。

只要我的内容页面不包含 b:carousel,导航周围的一切都按我的预期工作

我想做什么:

正如我上面提到的,我的 SPA 和所有导航都正常工作,除非我将 b:carousel 添加到内容页面。

请考虑以下示例:

我有 2 个内容页面。第 1 页包含带有一些文本的单个标签。第 2 页包含带有一些图像的 b:carousel。第 1 页是欢迎页面。 当我从第 1 页导航到第 2 页时,什么也没有发生。我需要完全刷新整个页面才能看到第 2 页,即使这样也不是每次都能正常工作。

我的主要问题:

如果上面有 b:carousel,有没有什么技巧可以用 ajax 更新内容页面? 我做错了什么?

编辑:

我在 github 上创建了一个示例项目,因此您可以明白我的意思。我使用了 Java 1.8、Tomcat 8.0.36 和 Netbeans IDE,但是该项目是一个 Maven 项目,也应该在 eclipse 中工作。

项目:https://github.com/mweber96/*39128418

我部分使用的SPA方法:http://www.beyondjava.net/blog/single-page-applications-with-bootsfaces/

这个问题和我之前的问题有关:Use ui:repeat with b:carousel?

【问题讨论】:

  • 还有很多与您的申请相关的问题。您如何执行导航?您是否看到任何错误日志?测试它的正确方法是实现一个将其与 MySql 层隔离的示例,并提供最少的代码来重现该问题。请参阅此处如何创建mcve。如果您提供了重现它所需的一切,或者您将示例项目上传到 github,我会看看它。
  • 我明天一有时间就创建一个示例项目!
  • 我在 github 上添加了一个示例项目,所以请随意测试它!我没有看到任何错误日志,所以一切都应该没问题。

标签: jsf carousel single-page-application bootsfaces


【解决方案1】:

这是两个错误的组合:

  • 您在 GitHub 上的示例使用 PrimeFaces,但它似乎没有使用 PrimeFaces 组件。效果是 PrimeFaces 添加了一些花哨的 JavaScript 来动态加载丢失的 CSS 文件(这很棒!),但它没有添加 PrimeFaces 核心库,因此 Mojarra 遇到了一个它默默隐藏的异常。您可以通过在页面中添加(可能是隐藏的)PrimeFaces 组件来解决此问题,方法是直接包含 PrimeFaces core.js 文件(尽管我不建议这样做),或者 - 当然 - 如果您真的不这样做,请删除 PrimeFaces 依赖项'不需要。

    • BootsFaces 依赖 HTML 属性来初始化轮播。令我惊讶的是,这甚至是有效的,至少部分有效。但是,要自动开始滑动,您仍然需要手动初始化 JavaScript 小部件。在你的情况下,那是 $("#myCarousel").carousel();

顺便说一句,我建议您在我们的错误跟踪器上打开一个错误来修复后一点(https://github.com/TheCoder4eu/BootsFaces-OSP/issues)。提前致谢!

【讨论】:

  • 感谢您的回答,我明天将尝试您的第一个示例,看看它是否有效。第二个问题是:我需要在其他一些页面上使用primefaces,例如上传多个文件等等。我不需要自动启动滑动,所以是否仍然需要通过 javascript 启动它或者我可以忽略这一点并让用户手动滑动?
  • 向我的主页 (index.xhtml) 添加一个隐藏的 primefaces 组件解决了这个问题。我还在您的错误跟踪器 (github.com/TheCoder4eu/BootsFaces-OSP/issues/495) 上开了一张新票。感谢您的帮助!
  • 只是为了完整起见(因为您可能已经自己弄清楚了):即使没有 JavaScript,轮播也可以工作(尽管我不知道为什么,这不是我所期望的)。高级选项只需要 JavaScript。
最近更新 更多