【问题标题】:The button/link/text component needs to have a Form in its ancestry. Please add <h:form>按钮/链接/文本组件需要在其祖先中有一个表单。请添加 <h:form>
【发布时间】:2012-08-02 12:51:46
【问题描述】:

我正在使用 JSF 和 RichFaces 4。我有一个巨大的表格,我必须将其分成几个面板。但是当我这样做时,我会收到警告。

例如,这使它显示警告:

<h:form>
    <rich:tabPanel>
        <rich:tab>
            //Form elements go here
        </rich:tab>
    </rich:tabPanel>
</h:form>

如何避免?

【问题讨论】:

  • 我将一个表单拆分为多个选项卡,只是因为表单很大。我不想单独处理每个选项卡,我想处理整个表单。
  • 我这样做了,这不是问题所在。然而,当我按照我在帖子中显示的方式执行此操作时,richfaces 会引发警告 - 如果我将表单元素(例如 h:inputText)放置在选项卡内、选项卡面板内、表单内,我会得到一个“按钮/link/text 组件需要在其祖先中有一个表单。请添加
    " 错误。
  • 我不是,我将表单元素(例如输入、选择等)放在一个rich:tab 中,它在一个rich:tabPanel 中,它在ah:form 中元素。
  • 好的,我了解您的问题。很奇怪,我在一个小型应用程序中使用了&lt;rich:tabPanel&gt;,这不是问题,也许你只是在工作结束时添加了
    ,清理并构建项目并且警告应该消失.另外,请确保此表单之外没有任何组件。
  • 所以我应该忽略警告吗?

标签: jsf richfaces


【解决方案1】:

首先,只有当javax.faces.PROJECT_STAGE 设置为Development 时才会出现此警告。因此,如果尽管有警告一切正常,那么您可以放心地忽略它。它不会出现在Production 阶段。

至于错误警告本身,在较旧的 Mojarra 版本中存在导致该错误的错误。此错误已报告为issue 2147,并且自大约一年前发布的 Mojarra 2.1.3 以来已修复(它在 2.1.11 中已经是currently)。因此,只需将 Mojarra 升级到至少 2.1.3 应该可以让您摆脱这个错误警告。

【讨论】:

  • 我如何知道我拥有的 Mojarra 版本,以及如何升级它?我正在使用 NetBeans 7.1.2。
  • 读取服务器启动日志。 Mojarra 在启动即将结束时将版本信息打印为 INFO。显然您没有手动安装 Mojarra,但它是由应用程序服务器提供的(例如 Glassfish)。您需要在服务器端升级它,而不是在 webapp 本身。 Netbeans 基本上只是一个编辑器(如记事本,只有更丰富的工具集),因此与问题无关。然而,以这种方式讲述 Netbeans 强烈暗示您确实实际上在使用 Glassfish。升级 JSF 可以通过替换 /glassfish/modules 中的 JAR 来完成。
  • 遗憾的是,我没有使用 GlassFish,我使用的是 Tomcat,但我找不到在 Tomcat 中更新 Mojarra 的方法。但是,考虑到这一点,显然我不能做太多事情,因为我稍后必须在另一台服务器上部署它。那么我应该忽略显然是错误的警告吗?
  • Tomcat 作为准系统 JSP/Servlet 容器根本不附带 JSF。所以你(或者可能是 Netbeans?)肯定应该把它放在 webapp 的/WEB-INF/lib 中。只需替换其中的 JAR。
  • 这很奇怪,我一直在使用 Tomcat 和 JSF,完全没有问题。更奇怪的是,我在 /lib/ 文件夹中的任何地方都看不到 Mojarra(除非 Mojarra 文件是 jsf-api.jar 和 jsf-impl.jar - 在这种情况下我确实看到了它们)。
猜你喜欢
  • 2011-12-06
  • 2016-07-14
  • 2016-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多