2013-02-19 10 views
18

JSF 2.0, cá móm 2.0.1, 3.4.1 PrimeFacesJSF gọi phương thức đậu từ nhập văn bản khi nhấn Enter

Dưới đây là một thành phần p:inputText mà dự kiến ​​sẽ gọi một phương thức đậu ủng hộ khi nhập quan trọng là ép.

<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> 

Trong khi ủng hộ đậu có phương pháp:

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

Nó phương pháp gọi khi nhập từ khóa cần được nhấn nhưng nó đã có hơn này; bất ngờ trường hợp hành vi:

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

Tôi nghĩ ajax event=change phát hiện một sự thay đổi nào đó và gọi phương pháp này. Làm thế nào để chuyển đổi thành phần p:inputText này thành một thành phần bình luận thích hợp như Facebook hay những người khác?

Trả lời

30

Đây là cách thức hoạt động của sự kiện onchange trong HTML. Điều này xảy ra khi văn bản trong phần tử đầu vào được thay đổi, nhưng được kích hoạt khi thành phần mất tiêu điểm (trong trường hợp của bạn là thời điểm bạn nhấp vào một nơi khác trong trang).

Bạn có thể xác định p:remoteCommand cho test phương pháp và chỉ cần viết:

<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; }"/> 

và ủng hộ đậu:

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

Nó làm việc như một nét duyên dáng! Cảm ơn! –

+0

Tôi gặp vấn đề liên quan đến người bạn này, [ở đây] (http://stackoverflow.com/q/14990692/1659451) –

+0

Cảm ơn bạn. Điều đó rất hữu ích. –