这是我的表单:
<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
但是如果我通过<h:message..>
改变<rich:message ..>
,它可以工作(我希望它与rich:message一起工作,因为它返回图像和消息)
为什么会这样?从来没有发生在我身上,直到现在。
RichFaces组件引用告诉我们关于<rich:messages>
:
13.1.1。基本用法
…
<rich:message>
组件在Ajax请求后自动呈现。这不需要通过Ajax请求源的render属性使用组件或特定引用。
所以,我只是删除m_name
上的render
属性,并用<a4j:ajax>
替换<f: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" />
如果你想显式地指定它,你可以在<rich:message>
组件上设置ajaxRendered="false"
。
<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" />
看起来像是richfaces行为。我怀疑你将不得不提交一个bug报告。
一种解决方法是将rich:message标签包含在div标签中的rich:message标签中,然后给div标签一个id="m_name"。