2013-02-19 59 views
18

JSF 2.0,鑽嘴魚科2.0.1,3.4.1 PrimeFacesJSF從輸入文本時按壓主叫豆輸入方法

下面是一個p:inputText部件預計調用當輸入鍵是一個backing bean方法按下。

<p:inputText id="commentInput" rendered="#{status.haveComment}" 
    value="#{statusBean.newComment}" 
    onkeypress="if (event.keyCode == 13) { onchange(); return false; }"> 
    <f:ajax event="change" listener="#{statusBean.test}" /> 
</p:inputText> 

雖然支持bean的方法:

public void test(AjaxBehaviorEvent event) { 
    System.out.println("Pressed enter!"); 
} 

按下回車鍵,但它有比這更多的時候,它調用的方法; 意外行爲情況:

--Click input text 
----Type some letters 
------Click somewhere else in the page 
--------CONSOLE: Pressed enter! 

我覺得莫名其妙ajax event=change檢測到變化並調用方法。如何將這個p:inputText組件轉換爲Facebook或其他適當的評論接受者組件?

回答

30

這就是onchange事件如何在HTML中工作的方式。當輸入元素中的文本發生變化時,發生這種情況,但是當組件失去焦點時(在您的情況下,當您單擊頁面中的其他位置時),會觸發它。

可以定義爲p:remoteCommand方法test,只是寫:

<p:remoteCommand name="test" actionListener="#{statusBean.test}"/> 
<p:inputText id="commentInput" rendered="#{status.haveComment}" 
    value="#{statusBean.newComment}" 
    onkeypress="if (event.keyCode == 13) { test(); return false; }"/> 

和支持bean:

public void test() { 
System.out.println("Pressed enter!"); 
} 
+0

它的工作就像一個魅力!謝謝! – 2013-02-19 16:50:33

+0

我有一個與此相關的問題,我的朋友,[這裏](http://stackoverflow.com/q/14990692/1659451) – 2013-02-20 22:14:34

+0

謝謝。這非常有幫助。 – 2015-09-22 00:45:44