1

我在 inputText 上使用 rich:validator 进行 JSR-303 验证,如下所示:

<h:outputLabel value="#{msgs['label.email']}:"/>
            <h:inputText value="#{loginBean.email}" id="email" size="50" validatorMessage="Invalid email address." styleClass="#{component.valid ? '' : 'invalid'}">
                <rich:validator />
            </h:inputText>
            <rich:message for="email" />

当验证失败时, inputText 的类应该更改为invalid,这会导致组件周围出现红色边框,并且应该使用 rich:message 显示Invalid email address消息。如果我输入了无效的电子邮件地址并将鼠标光标移到 inputText 之外,则只会Invalid email address出现该消息;UIInput 不会切换到invalid类,因此组件周围不会出现红色边框。但是,如果我单击提交按钮并使用无效的电子邮件地址提交表单,则在重新加载页面时 inputText 框的类会发生更改,并且我会同时收到红边组件和错误消息。为什么会这样?JSR-303 不要求客户端验证工作与提交表单一样吗?

编辑:

我在 inputText 中添加了以下内容,这解决了更改 inputText 上的类的问题:

 <a4j:ajax event="blur" render="email"/>

然而,这带来了一个新的问题。现在,错误消息不是“粘性的”。换句话说,当输入无效的电子邮件时,inputText 上会出现红色轮廓并出现错误消息,如预期的那样,但如果我随后在另一个组件上输入无效输入并且它的类更改为“无效”并且出现错误消息,“电子邮件”上的错误消息消失。inputText 类更改现在可以正常工作,但消息是不稳定的,如果另一个组件的条目无效,它们就会消失。

4

0 回答 0