在我在文本框中输入的每个键之后都不会发生 ajax 调用。仅在输入 14 位数字后才调用 ajax
有一些混乱正在发生。上述陈述不属实。
肯定会调用 ajax 调用。在 webbrowser 的内置开发人员工具集中跟踪 HTTP 流量(在 Chrome/IE9/Firebug 中按 F12 并检查网络部分)。/*
在或 JSF上创建一个 HTTP 过滤器PhaseListener
,您会看到它在每次按键时都会被调用(这意味着每次都肯定会命中服务器)。
您可能实际上意味着<f:ajax listener>
未调用中指定的动作侦听器方法。反过来,这确实是真的。但这是完全预期的行为。即存在验证错误。这样 JSF 将跳过UPDATE_MODEL_VALUES 和 INVOKE_ACTION 阶段。所以动作方法实际上是设计上没有被调用的。当出现验证错误时,不应执行业务逻辑。
我不确定你为什么期望它被调用。为什么要对无效输入执行业务逻辑?如果您更详细地阐述具体功能,那么我们也许可以为此提出正确的方法。
根据评论进行更新disabled
,只需在视图端检查输入组件在其他组件属性中的有效性,方法是检查UIInput#isValid()
通过将组件绑定到视图可以获得的结果:
<h:inputText ... binding="#{input}">
<f:ajax event="keyup" render="input2 input3 input4" />
<f:validateRegex pattern="[0-9]{14}" />
</h:inputText>
<h:inputText id="input2" ... disabled="#{not input.valid}" />
<h:inputText id="input3" ... disabled="#{not input.valid}" />
<h:inputText id="input4" ... disabled="#{not input.valid}" />
不需要 ajax 侦听器方法。