【问题标题】:My event ajax keydown is too slow我的事件 ajax keydown 太慢了
【发布时间】:2014-01-29 07:53:28
【问题描述】:

我的 h:inputText 有问题,我不知道如何解决。

我正在使用 JSF 和 RichFaces 处理一个 xhtml 页面,其中包含日历、SelectOneMenu、InputTextArea、Input 等字段。在我的表单末尾,有两个按钮 Print 和 Save。

如果修改了其中一个字段(文本、日期等),我必须禁用“打印”按钮。在每个领域,我都添加了 ajax 事件。

例如:

<rich:calendar datePattern="dd/MM/yyyy" timeZone="#{timeZone.timeZone}" value="#{myBean.date}">
    <f:ajax event="change" listener="#{myBean.verifyModification}" render="myForm"/>
</rich:calendar>

如果我的日期改变了,我调用一个存储在我的 bean 中的方法就可以了。

但是,我的 inputText 和 inputTextArea 有问题。

<h:inputText value="#{myBean.name}" maxlength="50">
    <a4j:ajax event="keydown" render="myForm" listener="#{myBean.verifyName}" />
</h:inputText>

如果我写得很快,例如,我会留在字母 a 上以在我的领域写 aaaaaaaa。该字段将包含 aaaaaaaa,然后是 aaaa。是不是因为ajax事件太慢了?问题不是来自我的 bean 方法,因为我只测试一个值。

因此,我无法测试该字段。我已经尝试过其他事件,例如模糊、更改。如果我使用这些事件,我必须点击我的字段然后我的按钮是刷新。

你能帮帮我吗?

谢谢。

【问题讨论】:

  • 我不知道 JSF,但您的实现不会在按下每个键时与服务器通信吗?因此,您每次都会面临网络延迟,这可能会产生延迟。
  • 是的,我在按下每个键时都与服务器通信。但我通过仅渲染按钮面板而不是所有表单来解决问题。

标签: javascript ajax jsf jsf-2


【解决方案1】:

问题很可能是您render 您的完整表单,而不仅仅是需要更新的部分。然后,JSF 会将您的表单替换为在第一个 ajax 请求中提交的值。试试:

<h:inputText value="#{bean.name}">
    <f:ajax event="keydown" render="myButtonP" listener="#{bean.verifyName}" />
</h:inputText>

<h:panelGroup id="myButtonP">
    <h:commandButton id="printBtn" value="Print" action="#{bean.printMe}" 
        disabled="#{bean.canPrint}" />
    <h:commandButton id="saveBtn" value="Save" action="#{bean.save}" />
</h:panelGroup>

如果你在按钮上使用disabled而不是rendered,你甚至可以直接在render属性中引用printBtn

【讨论】:

  • 谢谢你。通过只渲染我的面板,问题就消失了。
猜你喜欢
  • 1970-01-01
  • 2017-08-02
  • 2012-07-26
  • 1970-01-01
  • 2014-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多