Компонент формы должен иметь UIForm в своем происхождении. Предложение: заключите необходимые компоненты в <h: form> - PullRequest
38 голосов
/ 03 ноября 2010

Вот моя форма:

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

Компонент формы должен иметь UIForm в своем происхождении.Предложение: заключите необходимые компоненты в <h:form>

Если я изменю <form action="j_security_check"> на <h:form>, он не исправит это, я должен поместить <h:form> внутри <h:panelGrid>.

Ответы [ 6 ]

44 голосов
/ 03 ноября 2010

Это просто Предупреждение , а не Ошибка . Предупреждения, как правило, предназначены для информирования разработчика о непредвиденных ситуациях / условиях, которые могут не сразу вызвать технические ошибки / проблемы. Все может работать просто безупречно, но поведение / результаты могут быть не такими, как задумал разработчик. Например, разработчик новичка может случайно использовать <form> вместо <h:form>. Предупреждения как это тогда полезны.

В вашем конкретном случае вы просто вынуждены использовать <form> из-за необходимости отправки в службу, отличную от JSF. Вы, как более опытный разработчик, знаете, что это законно. Вы можете просто проигнорировать это предупреждение. Это предупреждение появляется только тогда, когда javax.faces.PROJECT_STAGE в любом случае установлено на Development, а not появляется, если оно установлено на Production.

Однако то, что он все еще отображает предупреждение, когда между формой и ее входными дочерними элементами находится другой компонент, такой как панель сетки, является ошибкой для меня. Я бы доложил об этом ребятам из Мохарры. Похоже, что он проверяет только непосредственного родителя, а не всех родителей. Обновление : исправлено в соответствии с Мохаррой 2.1.3 / 2.2, см. Также выпуск 2147 .

Это, кстати, не специфично для Glassfish. Конечно, новая версия GF поставляется с более новой версией Mojarra, в которой реализованы эти предупреждения. См. Также выпуск 1663 .

Похожие вопросы:

16 голосов
/ 02 марта 2011

Это мне предложил Олег с форума PrimeFaces и работает:

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

С уважением, Брендан.

4 голосов
/ 21 декабря 2010

Отображается только если вы находитесь в JSF Development на основе вашей веб-конфигурации.

<context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>

Когда вы меняете его на Производство, оно больше не будет отображаться

3 голосов
/ 17 мая 2014

Если кто-нибудь найдет это полезным однажды, у меня была та же ошибка, и проблема заключалась в том, что у меня есть простой компонент

<p:something ....

и этот компонент не был внутри <h:form> element

1 голос
/ 31 июля 2015

Я использую Мохарру 2.1.27 и узнаю, что это мои ошибки. Однако просто очень сложно найти ошибки. Надеюсь, кто-то из Mojarra может добавить идентификатор компонента к предупреждающим сообщениям. Вот что я сделал, чтобы узнать компонент: (который также размещен на https://code.google.com/p/primefaces/issues/detail?id=1586#c48)

Я прослеживаю его, загрузив исходный код Mojarra и добавив точку останова в класс com.sun.faces.context.FacesContextImpl в методе: public void addMessage (String clientId, сообщение FacesMessage). когда точка останова поймает, откройте окно «Отладка» или окно стека вызовов, чтобы узнать, что он был вызван com.sun.faces.application.view.FormOmittedChecker в методе приватная статическая пустота addFormOmittedMessage (FacesContext context) который ранее вызывается методом

общедоступная статическая проверка недействительности (контекст FacesContext).

внутри метода проверки есть параметр переменной компонента. Вы можете получить идентификатор компонента из окна Watch или переменной, а затем отследить его до html-страницы и кода.

Это трудный путь, но надеюсь, что вы найдете корень проблем. Будет намного проще, если в предупреждающем сообщении также будет отображаться идентификатор проблемного компонента

0 голосов
/ 04 июня 2019

В моем случае это предупреждающее сообщение отображалось в p:messages, которое я поместил в диалог, чтобы показать ошибки проверки, поэтому я только что включил severity="error" в p:messages, и предупреждающее сообщение пропало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...