我遇到了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方法,因为我只测试一个值。
因此,我无法测试此字段。我尝试过其他事件,如模糊,改变。如果我使用这些事件,我必须单击我的字段,然后刷新我的按钮。
请问你能帮帮我吗?
谢谢。
答案 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
。