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

Jsf 查找原因:“;表单组件需要在其祖先中具有UIForm。”;,jsf,primefaces,Jsf,Primefaces,有没有办法确定是哪一行(甚至是哪一个文件)导致了错误 表单组件需要在其祖先中具有UIForm。建议:将必要的组件封装在 来自Primefaces的警告消息?我刚开始着手一个已建立的项目,其中有很多很多.xhtml文件(由其他人编写),带有各种模板和继承,我很难缩小导致问题的文件范围 我曾尝试过谷歌搜索,但运气不佳,我无法在上面找到答案,从而解决了如何找到错误源的问题 更新:它不像转到url中显示的页面那么简单。例如,当我导航到'../foo.xhtml'时会显示警告,但是,foo.xhtml实现

有没有办法确定是哪一行(甚至是哪一个文件)导致了错误

表单组件需要在其祖先中具有UIForm。建议:将必要的组件封装在

来自Primefaces的警告消息?我刚开始着手一个已建立的项目,其中有很多很多.xhtml文件(由其他人编写),带有各种模板和继承,我很难缩小导致问题的文件范围

我曾尝试过谷歌搜索,但运气不佳,我无法在上面找到答案,从而解决了如何找到错误源的问题

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

如果
isInNeedOfForm(component)
返回了
true
,则在
块内放置一个调试断点,从Mojarra 2.2.12开始

   96                    if (isForm(component)) {
   97                        result = VisitResult.REJECT;
   98                    } else if (isInNeedOfForm(component)) {
*  99                        addFormOmittedMessage(finalContext);
  100                    }
给定一个带有输入字段且不带
的页面

<h:inputText id="someInputText" />

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

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


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

哪个页面应该清晰,对吗?因为你在一个页面中得到了这一点(或者这是服务器日志记录吗?),所以你尝试提高日志级别了吗?@Kukeltje,实际上没有。我会更新这个问题。而且,它不会在任何地方注销,它只是一条primefaces咆哮消息,在页面加载时显示。所以你知道它是什么页面。然后开始缩小页面。就这么简单。删除模板等。。这就是找到原因的方法。不应超过5分钟。@Kukeltje-当有多个模板和include语句时不应如此。而且几乎不可能开始注释页面,因为引用其他包含的文件会导致异常。感谢您的回复!我会尽快试一试的。效果很好!我希望我能做的不仅仅是投票和接受。非常感谢你!不客气。你可以考虑开始赏金,让它运行整整一周。