2011-12-16 71 views
1

我有一个文本框。只要用户在文本框外单击,下面的代码就会调用doSomethingOnValueChange。事情按预期工作。另一方面,如果用户编辑我的文本框并直接点击保存,save方法将首先被调用,doSomethingOnValueChange被稍后调用。我怎样才能解决这个问题?JSF onchange然后保存

<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

如果你立即摆脱了会发生什么? – wrschneider 2011-12-17 00:34:27

+0

摆脱立即=真并没有帮助。 – user238021 2011-12-17 00:57:07

+0

使用此构造,当您立即按下按钮时,应该调用值更改侦听器两次。一次由botton发起同步请求,一次由change事件触发ajax。它真的只被调用过一次吗? – BalusC 2011-12-17 12:08:56

回答

0

尝试使用onkeyup事件,这将修复它

<a4j:support ajaxSingle="true" event="onkeyup" /> 
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}" /> 
0

我加requestDelay = “30” 我的保存按钮。将按钮更改为a4j按钮。这解决了我的问题。我还在我的web.xml中添加了全局队列

<context-param> 
    <param-name>org.richfaces.queue.global.enabled</param-name> 
    <param-value>true</param-value> 
</context-param> 
相关问题