我有一个文本框。只要用户在文本框外部单击,下面的代码就会调用doSomethingOnValueChange。事情按预期工作。另一方面,如果用户编辑我的文本框并直接单击“保存”,则首先调用save方法,稍后调用doSomethingOnValueChange。我该如何解决这个问题?
<ui:define name="label">My Text box</ui:define>
<h:inputText required="true" value="#{myBean.myTextBox}"
immediate="true" valueChangeListener="#{controller.doSomethingOnValueChange}">
<a4j:support ajaxSingle="true" event="onchange" />
</h:inputText>
<h:commandButton value="Save" action="#{controller.save}" />
答案 0 :(得分:0)
尝试使用onkeyup
事件来修复它
<a4j:support ajaxSingle="true" event="onkeyup" />
答案 1 :(得分:0)
试试这个:
<f:metadata>
<f:viewParam name="p" value="#{myBean.myTextBox}" />
</f:metadata>
<script type="text/javascript">
function getValue()
{
var x=document.getElementById("form:text").value;
return x;
}
</script>
<h:inputText required="true" id="text"
valueChangeListener="#{controller.doSomething}" >
<a4j:param noEscape="true" value="getValue()" name="p" />
<a4j:ajax event="change" />
</h:inputText>
<h:commandButton value="Save" action="#{controller.save}" />
答案 2 :(得分:0)
我在我的保存按钮中添加了requestDelay =“30”。将按钮更改为a4j按钮。这解决了我的问题。我还在我的web.xml中添加了全局队列
<context-param>
<param-name>org.richfaces.queue.global.enabled</param-name>
<param-value>true</param-value>
</context-param>