【问题标题】:Javascript working in HTML but not XHTML JSFJavascript 在 HTML 但不是 XHTML JSF 中工作
【发布时间】:2020-08-30 01:30:52
【问题描述】:

我正在开发一个使用 JSF 2.1RichFaces 3.3

的网络应用程序

我有一个外部 Javascript 需要在所有应用程序的页面上运行,所以我把它放在我的模板文件的头部,称之为layout.xhtml

这是所有不同页面的模板,所以我想我至少把它放在了正确的位置。
<ui:composition template="/templates/layout.xhtml">

脚本本身没问题,在 JSFiddle 上测试过,运行正常。

它的格式是这样的:

<script src="https://cdn.cookielaw.org/scripttemplates/otSDKStub.js" 
        data-document-language="true" 
        type="text/javascript" 
        charset="UTF-8" 
        data-domain-script="dummy-value-for-stack-overflow">
</script>

在应用程序中进行测试时,我能够让脚本在正常的 .html 页面上正常运行,但是当我更改为使用 .xhtml 页面时,我在浏览器的控制台中遇到错误:

Uncaught (in promise) TypeError: e.Groups.forEach is not a function
    at Ct.setPublicDomainData (otBannerSdk.js:7)
    at Ct.<anonymous> (otBannerSdk.js:7)
    at otBannerSdk.js:7
    at Object.next (otBannerSdk.js:7)
    at otBannerSdk.js:7
    at new Promise (<anonymous>)
    at c (otBannerSdk.js:7)
    at Ct.initializeBannerVariables (otBannerSdk.js:7)
    at otBannerSdk.js:7
    at otBannerSdk.js:7

我认为这是由于脚本标签中的数据属性, data-document-languagedata-domain-script,因为它们在我使用的任何命名空间中都不是有效属性,而且 XHTML 对这类事情很严格:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:rich="http://richfaces.org/rich"
    lang="en-US">

我在想的是 XHTML 不喜欢那些数据属性,所以脚本试图在没有它们的情况下运行,而控制台错误是由空值引起的。

有没有办法解决这个问题?我知道 JSF 2.2+ 允许一些自定义属性选项,但我不确定它们是否专门应用于 script 标签

这是我第一次从事 JSF 项目,如有遗漏,敬请见谅,谢谢。

【问题讨论】:

  • 请先阅读stackoverflow.com/questions/2935759/…...我什至认为它是重复的。如果是服务器端命名空间问题,服务器会抱怨,而不是客户端错误。我宁愿认为这是正在加载的重复 .js 文件之间的基本冲突。相关的是客户端 html 的外观,而不是服务器端的内容和客户端错误的内容。尝试像在副本中一样删除 xmlht 命名空间
  • 您说正在加载重复的 .js 文件,但是在浏览器的网络选项卡中,我没有看到任何重复项,只是一个带有 Status 200 响应的普通 GET 请求
  • 必须有多个获取请求,因为您使用的 Richfaces 也使用 java。但我提到了更多......检查差异,制作一个没有richfaces组件的普通xhtml文件。仍然错误?做一个minimal reproducible example 然后......然后在搜索引擎中发布错误并调查......关于对象与数组等的事情......
  • java 在我之前的评论中应该是 javascript

标签: javascript jsf xhtml richfaces


【解决方案1】:

事实证明,当 RichFaces 将大量脚本注入 html 文件的 head 部分时,发生了某种冲突,并且似乎导致我试图添加的脚本出现一些奇怪的行为。

一种解决方法是对我的web.xml 进行小幅更改,将RichFaces LoadScriptStrategy 值从ALL 更改为DEFAULT

    <context-param>
        <param-name>org.richfaces.LoadScriptStrategy</param-name>
        <param-value>DEFAULT</param-value>
    </context-param>

NONE 也对我有用,但根据他们的文档建议避免使用:https://docs.jboss.org/richfaces/latest_3_3_X/en/devguide/html/ArchitectureOverview.html#ScriptsandStylesLoadStrategy(删除所有这些脚本可能会导致其他问题)

感谢@Kukeltje,因为他的 cmets 试图澄清我的问题 - 否则我什至不会认为 RichFaces 是罪魁祸首,我确信这是 xhtml 和标签的问题(不是)

【讨论】:

  • 看看为什么创建minimal reproducible example 总是相关的......总是......它有助于找到根本原因或至少极大地缩小范围......总是尝试创建一个...... .
猜你喜欢
  • 2015-07-22
  • 2012-04-07
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
  • 2023-01-23
  • 1970-01-01
  • 2013-06-29
  • 1970-01-01
相关资源
最近更新 更多