40 votes

Le composant de formulaire doit avoir un UIForm dans son ascendance. Suggestion: enfermer les composants nécessaires dans <h:form>

Voici mon formulaire:

<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>

Il fonctionne bien avec Glassfish 3.0.1, mais depuis Glassfish 3.1 b2 il affiche ce message d'avertissement comme un FacesMessage dans le programme JSF page:

Le composant formulaire doit avoir un UIForm dans son ascendance. Suggestion: inclure les composants nécessaires au sein d' <h:form>

Si je change l' <form action="j_security_check"> de <h:form>, il n'est pas la solution, je dois placer l' <h:form> à l'intérieur de l' <h:panelGrid>.

50voto

BalusC Points 498232

C'est juste un Avertissement, pas une Erreur. Les avertissements sont généralement là pour informer le développeur sur des situations imprévues, conditions qui ne peuvent pas immédiatement provoquer des erreurs techniques et des problèmes. N'importe quoi peut seulement fonctionner parfaitement, mais le comportement/les résultats peuvent sans doute pas être le développeur de l'intention. Un débutant développeur peut par exemple accidentellement ont utilisé <form> au lieu de <h:form>. Des avertissements de ce genre sont alors utiles.

Dans votre cas particulier, vous êtes tout simplement forcé d'utiliser <form> en raison de la nécessité de se soumettre à un non-JSF service. Vous en tant que plus de développeurs expérimentés savent qu'il est légitimement valide. Vous pouvez simplement ignorer cet avertissement. Cet avertissement n'apparaîtra que lors de l' javax.faces.PROJECT_STAGE est définie à l' Development de toute façon et de ne pas apparaître quand il est réglé à l' Production.

Cependant, qu'il affiche toujours l'alerte quand il y a un autre composant panelgrid entre la forme et le son de l'entrée des enfants, est un bug pour moi. Je voudrais signaler à la Mojarra les gars. Il ressemble comme si elle est en train de vérifier le parent immédiat seulement et non pas tous les parents. Mise à jour: il a été résolu que par Mojarra 2.1.3/2.2, voir aussi la question 2147.

C'est par le moyen de ne pas Glassfish spécifiques. La plus récente GF version bien sûr livré avec une nouvelle Mojarra version qui a ces mises en garde mises en œuvre. Voir également la question de 1663.

Questions connexes:

16voto

Oversteer Points 989

Cela m'a été suggéré par Oleg du forum PrimeFaces et fonctionne:

 <h:form id="login" prependId="false"
                onsubmit="document.getElementById('login').action='j_security_check';">
 

Cordialement, Brendan.

4voto

Carlo Pacheco Points 31

Il ne s'affiche que si vous êtes en développement JSF en fonction de votre configuration Web.

Développement javax.faces.PROJECT_STAGE

Lorsque vous le changez en Production, il ne s'affichera plus

3voto

jNick Points 85

Si quelqu'un trouvera cela utile un jour, j'ai eu la même erreur et le problème était que j'ai un composant primefaces

 <p:something ....
 

et ce composant n'était pas dans l'élément <h:form>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X