有什么方法可以确定哪一行(甚至是什么文件)导致
表单组件需要在其祖先中有一个 UIForm。建议:将必要的组件包含在
来自 Primefaces 的警告信息?我刚刚开始处理一个已建立的项目,其中包含许多带有各种模板和继承的 .xhtml 文件(由其他人编写),但我无法确定导致问题的文件的范围。
我试过谷歌搜索但没有运气,我找不到关于如何找到错误来源的答案。
更新:它不像转到 url 中显示的页面那么简单。例如,当我导航到 时会显示警告'../foo.xhtml',但是,它foo.xhtml实现了一个模板并包含多个其他.xhtml文件(每个文件又包含更多.xhtml文件)。所有文件都有些大(至少 500 行)。
将调试断点放置在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修复。