查找原因:“表单组件需要在其祖先中有一个 UIForm。”

luc*_*svw 4 jsf primefaces

有什么方法可以确定哪一行(甚至是什么文件)导致

表单组件需要在其祖先中有一个 UIForm。建议:将必要的组件包含在

来自 Primefaces 的警告信息?我刚刚开始处理一个已建立的项目,其中包含许多带有各种模板和继承的 .xhtml 文件(由其他人编写),但我无法确定导致问题的文件的范围。

我试过谷歌搜索但没有运气,我找不到关于如何找到错误来源的答案。

更新:它不像转到 url 中显示的页面那么简单。例如,当我导航到 时会显示警告'../foo.xhtml',但是,它foo.xhtml实现了一个模板并包含多个其他.xhtml文件(每个文件又包含更多.xhtml文件)。所有文件都有些大(至少 500 行)。

Bal*_*usC 5

将调试断点放置在FormOmittedChecker#check(),已返回的if块内,即Mojarra 2.2.12 的第 99 行isInNeedOfForm(component)true

   96                    if (isForm(component)) {
   97                        result = VisitResult.REJECT;
   98                    } else if (isInNeedOfForm(component)) {
*  99                        addFormOmittedMessage(finalContext);
  100                    }
Run Code Online (Sandbox Code Playgroud)

给定一个没有输入字段的页面<h:form>

<h:inputText id="someInputText" />
Run Code Online (Sandbox Code Playgroud)

断点命中将在 Eclipse 中如下所示:

正如您在屏幕截图中看到的,您可以检查component变量堆栈中的变量,然后检查其clientId(或id)属性。最后,您可以在生成的 HTML 输出和/或 JSF 源代码中找到并关联它。

但是,我同意该消息应包含更好的诊断信息。这已在 Mojarra 2.3.0-m04 中根据issue 4026修复。