【问题标题】:Error with p:selectOneMenu in Primefaces 3.4.2Primefaces 3.4.2 中的 p:selectOneMenu 出错
【发布时间】:2012-12-17 23:43:58
【问题描述】:

我最近将 Primefaces 从 3.4 更新到 3.4.2,现在我在一些有 p:selectOneMenu 组件的页面上遇到了问题。我在 JavaScript 控制台中看到错误消息:TypeError: e.offset(...) is undefined。此错误会在页面加载时立即记录。

有谁知道问题出在哪里?

【问题讨论】:

  • 听起来像是 jQuery 版本冲突。您是否出于某种原因在每个页面中手动包含 jquery.js 文件,而不是依赖 PrimeFaces 本身已经提供的文件? PrimeFaces 几乎在每个版本中都会更新内置 jQuery 库的版本。解决方案显然是停止手动包含 jQuery,而只使用提供的 PrimeFaces。
  • 不,只使用提供的默认 jQuery。我看到他们在 3.4.2 中更改了 jQuery 版本,所以我尝试使用 Primefaces 3.4.1,它工作正常。 JavaScript 错误出现在 primefaces.js 文件的第 1 行。在 Javascript 中的堆栈之后,我看到调用的顶级函数是:PrimeFaces.cw('SelectOneMenu','widget_aswdatatable_detaljSubview_editForm_paket',{id:'aswdatatable:detaljSubview:editForm:paket',effect:'fade'});}
  • 我也在使用 3.4.2,无法重现您的问题。我仍然怀疑一些与 jQuery 相关的不良 JS 文件会导致问题。您是否调查了获得的 HTML 输出和/或 HTTP 流量中的 <script> 引用,以确保确定?
  • 好的。我发现为什么会发生这种情况,但仍然不知道这是一个错误还是我没有以正确的方式使用它。我有一个带有数据表的复合组件和几个显示条目详细信息的对话框。在复合组件中,我定义了 facet detailForm,并在每个对话框中渲染了该 facet。当然,我将每个cc:renderFacet 封装在不同的f:subview 中。这可以吗?如果这不是我应该做的?当我只留下一个cc:renderFacet 时,它工作正常。
  • 最后,当我在复合组件中多次渲染同一个构面时,就会出现问题。 Primefaces 为所有 selectOneMenu 元素生成相同的 widgetVar。我通过检查生成的 HTML 发现了这一点。

标签: javascript jquery jsf-2 primefaces selectonemenu


【解决方案1】:

好的,经过很长时间终于弄清楚发生了什么。在 Primefaces 3.4.2 中,p:selectOneMenu 的行为发生了一点变化,这样 change 事件会在页面加载后立即触发。当我们有完全空的p:selectOneMenu 时会出现此问题,这意味着f:selectItemsvalue 为空,并且没有f:selectItem 为空选项。在这种情况下,我们可以在控制台中看到错误 TypeError: e.offset(...) is undefined,并且 javascript 从那时起就没有用了,并且不再起作用。现在它必须是空的f:selectItem,或者f:selectItems 中的至少一个元素。

【讨论】:

  • 不错的解决方法。您是否在 Primefaces Bug Tracker 提交或发现了问题?如果是,请在这里分享。
  • 其实不是。也许这个错误在 3.5 中已修复,我真的不知道。但实际上这在 jQuery 中可能比 Primefaces 中的问题更多。
猜你喜欢
  • 1970-01-01
  • 2014-04-19
  • 2013-05-22
  • 1970-01-01
  • 2013-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
相关资源
最近更新 更多