forms - 表单组件的祖先中需要有一个 UIForm。建议 : enclose the necessary components within <h:form>

标签 forms jsf jsf-2

这是我的表格:

<form action="j_security_check">
    <h:panelGrid columns="2" bgcolor="#eff5fa" cellspacing="5" frame="box" styleClass="center">
        <h:outputLabel value="User ID:"/>
        <h:inputText id="j_username" tabindex="1" />
        <h:outputLabel value="Password:"/>
        <h:inputSecret id="j_password"/>
        <h:outputLabel value=""/>
        <h:commandButton id="login" value="Login"/>
    </h:panelGrid>
</form>

它在 Glassfish 3.0.1 上运行良好,但从 Glassfish 3.1 b2 开始,它将此警告显示为 FacesMessage在 JSF 页面中:

The form component needs to have a UIForm in its ancestry. Suggestion: enclose the necessary components within <h:form>

如果我更改<form action="j_security_check"><h:form> ,它没有修复它,我必须放置 <h:form>里面<h:panelGrid> .

最佳答案

这只是一个警告,而不是错误。警告通常是为了告知开发人员可能不会立即导致技术错误/问题的不可预见的情况/条件。任何事情都可能完美地工作,但行为/结果可能不符合开发人员的意图。例如,新手开发人员可能不小心使用了 <form>而不是<h:form> 。这样的警告很有帮助。

在您的特定情况下,您只是被迫使用 <form>因为需要提交到非 JSF 服务。作为经验丰富的开发人员,您知道它是合法有效的。您可以忽略此警告。此警告仅在 javax.faces.PROJECT_STAGE 时出现设置为Development无论如何,当它设置为 Production不会出现.

但是,当表单与其输入子项之间存在另一个组件(例如 panelgrid)时,它仍然显示警告,这对我来说是一个错误。我会把这件事报告给 Mojarra 的人。看起来好像只检查直接父级而不是所有父级。 更新:已按照 Mojarra 2.1.3/2.2 进行修复,另请参阅 issue 2147 .

顺便说一句,这不是 Glassfish 特有的。当然,较新的 GF 版本附带了较新的 Mojarra 版本,该版本已实现这些警告。另请参阅issue 1663 .

相关问题:

关于forms - 表单组件的祖先中需要有一个 UIForm。建议 : enclose the necessary components within <h:form>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4089076/

相关文章:

forms - Twig 表单小部件动态选择表单字段

html - 如何手动制作类似 GWT 的 CaptionPanel

java - Enum 的 toString 方法和 Java 良好实践

jsf-2 - jsf2 xhtml 页面不被浏览器解释

jsf-2 - Mojarra 2.1.14 flash 范围消息并重定向到不同的路径

jsf-2 - 如何在 jsf 中获取多选复选框值?

javascript - 表单 - 同步请求并在提交时显示 div

forms - 在 TYPO3 extbase 的一个 Controller 中从两个不同的模型中获取数据

java - css richfaces 问题(接缝)

javascript - 直接从nodejs在HTML中追加一个子元素?