【问题标题】:mojarra is not defined when javax.faces.PROJECT_STAGE is Production当 javax.faces.PROJECT_STAGE 为 Production 时,未定义 mojarra
【发布时间】:2013-06-06 17:23:19
【问题描述】:

今天我收到异常“mojarra 未定义”。

我偶然发现了以下问题:Thisthisthis

这些解决方案都不是我的问题。

经过一些调试后,我通过将 web.xml 中的 javax.faces.PROJECT_STAGE 参数更改为:

<param-value>Production</param-value>

到:

<param-value>Development</param-value>

它解决了这个问题,但是将我的项目投入生产时应该怎么做?我应该将参数留在开发上吗?

【问题讨论】:

  • 我从未见过这个问题。请确定根本原因。变量名为 mojarra 的 JavaScript 对象在 jsf.js 文件中定义,如果您有 &lt;h:head&gt;,则该文件应该是自动包含的。查看生成的 HTML 输出。 jsf.js 文件是否存在于头部?查看浏览器的内置 HTTP 流量监视器。它是否向浏览器返回了正确的响应或 404 左右?与项目阶段的唯一区别是开发阶段将查询字符串附加到 URL,这会导致返回非缩小版本。
  • 很有可能您同时测试了 MyFaces 和 Mojarra,并且浏览器正在积极缓存 jsf.js 文件的 MyFaces 版本。但是一个相当简单的清除浏览器缓存和/或硬刷新应该可以解决它。
  • 我的组件在开发模式下调用mojarra.ab(this,event,'valueChange',0,'menu-form:pagina-select') jsf.js 是mojarra,但在生产模式下它似乎是我的脸的缩小版,jsf.js 开头的小摘录在生产模式下:if(!window.myfaces){var myfaces=new function(){};window.myfaces=myfaces;},即使我的组件仍然调用mojarra.ab(...)。我会仔细检查我的服务器配置。
  • 清除浏览器缓存。如果使用代理,请联系其管理员以清除其缓存。

标签: jsf


【解决方案1】:

我的组件在开发模式下调用 mojarra.ab(this,event,'valueChange',0,'menu-form:pagina-select') jsf.js 是 mojarra,但在生产模式下似乎作为我的面孔的缩小版,生产模式下 jsf.js 开头的小摘录:if(!window.myfaces){var myfaces=new function(){};window.myfaces=myfaces;},甚至虽然我的组件仍然调用 mojarra.ab(...)。我会仔细检查我的服务器配置

您显然已经对 Mojarra 和 MyFaces 进行了试验,而 jsf.js 的 MyFaces 版本挂在网络管道某处的激进缓存中。至少清除浏览器的缓存,如果有的话,还要清除代理的缓存。

它在开发阶段工作是因为jsf.js 的 URL 包含一个额外的 Mojarra 独有的查询字符串(它会返回一个非缩小版本以方便调试)。

【讨论】:

  • 我在 localhost 中运行它。我清除了缓存并使用生产集启动了应用程序并得到了相同的结果。
【解决方案2】:

这些天我遇到了同样的麻烦,我发现这是由我的extendend omnifaces 资源处理程序引起的。

public class VersionableResourceHandler extends DefaultResourceHandler {
  //...
  @Override
  public Resource decorateResource(Resource resource) {
    if (resource == null) {
        return resource;
    }
    return new RemappedResource(resource, resource.getRequestPath() + "?v=1_2_1");
  }
}

<param-value>Development</param-value>

带有我附加的版本字符串的生成输出将是:

 <script type="text/javascript" src="/javax.faces.resource/jsf.js?ln=javax.faces&amp;stage=Development%3Fv=1_2_1"/>

<param-value>Production</param-value>

生成的输出如下:

<script type="text/javascript" src="/javax.faces.resource/jsf.js?ln=javax.faces%3Fv=1_2_1"/>

由于第二个“?”而无效,因此必须将“?v=1_2_1”替换为“&v=1_2_1”。

【讨论】:

    猜你喜欢
    • 2018-12-29
    • 2023-03-25
    • 1970-01-01
    • 2017-11-23
    • 2022-12-22
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多