用于呈现<rich:message> </rich:message> </f:ajax>时出错“<f:ajax>包含未知ID”

时间:2011-09-09 15:53:42

标签: jsf jsf-2 richfaces glassfish-3

这是我的表格:

<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 个答案:

答案 0 :(得分:1)

The RichFaces component reference告诉我<rich:messages>

  

13.1.1。基本用法

     

...

     

在Ajax请求之后,<rich:message>组件自动呈现。这通过Ajax请求源的render属性不使用组件或特定引用而发生。

因此,我只需删除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" />

答案 1 :(得分:0)

对我来说看起来像一个富有表现的行为。我怀疑你必须提交错误报告。

解决方法是将rich:message标记包含在div标记内的rich:message标记内,然后将div标记赋予id =“m_name”。