我有这个小表格,并试图了解 ajax 在 JSF 验证中的使用。这是表格。(支持 bean 只是一个简单的 bean,有两个变量 firstName 和 lastName。)
<h:form>
<h:outputLabel for="firstName" value="First Name: " />
<h:inputText id="firstName" value="#{userBean.firstName}">
<f:validateLength minimum="5" />
<f:ajax event="keyup" render="firstNameMsg" />
</h:inputText>
<h:message id="firstNameMsg" for="firstName" style="color: red" />
<br />
<h:outputLabel for="lastName" value="Last Name: " />
<h:inputText id="lastName" value="#{userBean.lastName}">
<f:validateLength minimum="5" />
<f:ajax event="keyup" render="lastNameMsg" />
</h:inputText>
<h:message id="lastNameMsg" for="lastName" style="color: red" />
<br />
<h:commandButton value="Submit">
<f:ajax execute="firstName lastName" render=":greeting" />
</h:commandButton>
<br />
</h:form>
<h:outputText id="greeting" value="#{userBean.greeting}" />
我在我的按钮上附加了 ajax,它在提交时使用名字和姓氏呈现 outputText 标记,这很好。我的问题是为什么我需要将f:ajax
标签与标签一起使用f:validateLength
才能验证这两个字段?我的理解是,ajax 执行所有生命周期阶段直到呈现响应阶段,即它包括验证。验证阶段是否无论如何都不会重新呈现带有消息的页面,无论它来自 ajax 请求还是常规提交/操作请求?如果我删除附加到输入字段的 ajax 标记,则不会显示验证消息,但如果我完全删除 ajax 并仅使用 commandButtons 操作事件进行常规提交,它们就会显示。