Ошибка «<f: ajax> содержит неизвестный идентификатор» при использовании для отображения <rich: message> - PullRequest
0 голосов
/ 09 сентября 2011

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

<h:body>
    <h:form>
        <h:panelGrid columns="3" >
            <h:outputLabel for="name" value="Primeiro nome:" />
            <h:inputText id="name" value="#{register.person.name}" >
                <f:ajax event="blur" render="m_name"  listener="#{register.validateName}" />                                        
            </h:inputText>
            <rich:message id="m_name" for="name" />
            //.. others fields
        </h:panelGrid>
    </h:form>
</body>

При попытке выполнить на Glassfish выдается следующая ошибка:

javax.servlet.ServletException: <f:ajax> contains an unknown id 'm_name' - cannot locate it in the context of the component name

Но если я изменю <rich:message ..> на <h:message..>, это сработает (я хочу, чтобы оно работало с rich: message, потому что оно возвращает изображение и сообщение)

Почему это происходит? Никогда со мной не бывало, до сих пор.

Ответы [ 2 ]

1 голос
/ 09 сентября 2011

Ссылка на компонент RichFaces говорит об этом <rich:messages>:

13.1.1.Основное использование

...

Компонент <rich:message> автоматически отображается после запроса Ajax.Это происходит без использования компонента или специальной ссылки через атрибут render источника запроса Ajax.

Итак, я бы просто удалил атрибут render в m_name и заменил <f:ajax> на <a4j:ajax>.

<h:inputText id="name" value="#{register.person.name}" >
    <a4j:ajax event="blur" listener="#{register.validateName}" />
</h:inputText>
<rich:message id="m_name" for="name" />

Если вы все равно хотите явно указать его, вы можете установить ajaxRendered="false" для компонента <rich:message>.

<h:inputText id="name" value="#{register.person.name}" >
    <f:ajax event="blur" listener="#{register.validateName}" render="m_name" />
</h:inputText>
<rich:message id="m_name" for="name" ajaxRendered="false" />
0 голосов
/ 09 сентября 2011

Похоже, что у меня такое поведение.Я подозреваю, что вам придется подать отчет об ошибке.

Обходной путь - заключить тег rich: message в тег rich: message внутри тега div, а затем присвоить тегу div id = "m_name».

...