这是我的表格:
<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>
Run Code Online (Sandbox Code Playgroud)
它适用于Glassfish 3.0.1,但是从Glassfish 3.1 b2开始,它FacesMessage在JSF页面中显示了这个警告:
表单组件需要在其祖先中具有UIForm.建议:将必要的组件包含在内
<h:form>
如果我更改<form action="j_security_check">为<h:form>,它不会修复它,我必须放在<h:form>里面<h:panelGrid>.
Bal*_*usC 47
这只是一个警告而不是错误.通常会有警告通知开发人员可能不会立即导致技术错误/问题的不可预见的情况/条件.任何事情都可能完美无缺,但行为/结果可能不像开发人员所希望的那样.例如,新手开发者可能会意外地使用<form>而不是<h:form>.这样的警告会有所帮助.
在您的特定情况下,您只是被迫使用,<form>因为需要提交到非JSF服务.您作为一个更有经验的开发人员知道它是合法有效的.你可以忽略这个警告.此警告仅在javax.faces.PROJECT_STAGE设置为Development任何时出现,并且在设置为时不显示Production.
但是,当表单和输入子节点之间有另一个组件如panelgrid时,它仍会显示警告,这对我来说是一个错误.我会向Mojarra家伙报告.看起来好像只检查直接的父母而不是所有的父母.更新:根据Mojarra 2.1.3/2.2进行修复,另见问题2147.
顺便说一句,这不是Glassfish特有的.较新的GF版本当然附带了更新的Mojarra版本,该版本已经实施了这些警告.另见问题1663.
Ove*_*eer 16
这是由来自PrimeFaces论坛的Oleg向我建议并且有效:
<h:form id="login" prependId="false"
onsubmit="document.getElementById('login').action='j_security_check';">
Run Code Online (Sandbox Code Playgroud)
此致,布兰登.