这是我的表格:
<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/