gpt4 book ai didi

ajax - JSF ajax 验证与 "normal"验证

转载 作者:行者123 更新时间:2023-11-30 23:46:56 25 4
gpt4 key购买 nike

我有这个小表单,正在尝试了解 ajax 在 JSF 验证中的使用。这是表格。 (支持 bean 只是一个带有两个变量 firstName 和 lastName 的简单 bean。)

<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 并仅使用命令按钮操作事件使用常规提交,它们就会显示。

最佳答案

这是因为在正常的请求处理中(没有任何客户端脚本处理)向服务器提交值的唯一方法是发送整个表单。当您删除所有 <f:ajax> 时会发生这种情况.不可能仅通过在输入字段中键入来从服务器(在本例中为您的验证消息)获得响应。

当您删除 <f:ajax> 时来自组件 firstNamelastName只留下最后一个 <h:commandButton>然后正如它所说它将执行firstNamelastName ,对这些字段进行服务器端验证,但结果它只会呈现 :greeting零件。要修复它,您可以添加到您的 <h:commandButton>这个:

<f:ajax execute="firstName lastName" render=":greeting firstNameMsg lastNameMsg"/>

但现在这些消息只会在您提交表单时显示,而不会在您在输入字段中键入键时显示。

要获得一些总结:使用 AJAX,您必须准确指定在发送请求后必须呈现哪些组件(及其所有子组件)。

顺便说一句,为用户在输入字段中键入的每个键发送服务器请求不是一个好主意。最好使用 JavaScript 或其他客户端技术来执行此操作,并在服务器上仅验证完整的最终值。

关于ajax - JSF ajax 验证与 "normal"验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14477647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com