这是我的表格:

<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开始,它将在JSF页面中以FacesMessage的形式显示此警告:



如果我将<form action="j_security_check">更改为<h:form>,但不能解决问题,则必须将<h:form>放入<h:panelGrid>内。

最佳答案

这只是警告而不是错误。通常会有警告来通知开发人员不可预见的情况/条件,这些情况/条件可能不会立即导致技术错误/问题。任何事情都可能完美无瑕地工作,但是行为/结果可能并非开发人员想要的那样。例如,新手开发人员可能不小心使用了<form>而不是<h:form>。这样的警告将很有帮助。
在您的特定情况下,由于需要提交到非JSF服务,因此您仅被迫使用<form>。作为经验丰富的开发人员,您知道它是合法的。您可以忽略此警告。无论如何,仅当javax.faces.PROJECT_STAGE设置为Development时才会出现此警告,而当其设置为Production时则不会出现。
但是,当窗体及其输入子级之间还有另一个组件(例如panelgrid)时,它仍然显示警告,这对我来说是一个错误。我会报告给Mojarra的家伙。看起来好像只在检查直系 parent ,而不是在检查所有 parent 。 更新:已根据Mojarra 2.1.3 / 2.2进行了修复,另请参见issue 2147
顺便说一下,这不是Glassfish特有的。当然,较新的GF版本附带了已实现这些警告的较新的Mojarra版本。另请参见issue 1663
相关问题:

  • The form component needs to have a UIForm in its ancestry. Suggestion: enclose the necessary components within <h:form>
  • 07-24 09:47
    查看更多