我的事件ajax keydown太慢了

时间:2014-01-29 07:53:28

标签: javascript ajax jsf jsf-2

我遇到了h:inputText的问题,我不知道如何解决它。

我正在使用JSF和RichFaces处理xhtml页面,其中包含Calendar,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方法,因为我只测试一个值。

因此,我无法测试此字段。我尝试过其他事件,如模糊,改变。如果我使用这些事件,我必须单击我的字段,然后刷新我的按钮。

请问你能帮帮我吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

问题很可能是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,则甚至可以直接在printBtn属性中引用render