表单组件需要在其祖先中具有UIForm.建议:在<h:form>中包含必要的组件

Tha*_*ham 38 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>
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.

相关问题:

  • 是的,我也在GF 3.1中得到了这个!"解决方法"正在将`javax.faces.PROJECT_STAGE`从**Development**更改为**Production**.希望当JSF 2.1.1-b04后继者稳定时,此消息将在开发模式中消失.就像@BalusC说的那样,它确实让新开发者感到困惑 - 他们可能会花费几个小时来解决这个问题.但经验丰富的开发人员只是忽略了这一点,因为它只是一个警告,并且在您更改为生产模式时不会显示. (4认同)
  • 现在必须有办法关闭警告.它必须类似于将服务器日志级别设置为SEVERE. (2认同)

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)

此致,布兰登.