2013-02-19 15 views
18

JSF 2.0, Mojarra 2.0.1, PrimeFaces 3.4.1JSF जब दबाने इनपुट पाठ से सेम विधि बुला दर्ज

यहाँ एक p:inputText घटक है जो एक समर्थन सेम विधि जब प्रवेश कुंजी है कॉल करने के लिए आशा की जाती है है दब गया।

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

जबकि समर्थन सेम की विधि है:

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 घटक को कैसे परिवर्तित करें?

उत्तर

30

यह तरीका है कि कैसे onchange ईवेंट HTML में काम करता है। यह तब हो रहा है जब इनपुट तत्व में पाठ बदल दिया जाता है, लेकिन जब घटक फोकस खो देता है तो निकाल दिया जाता है (आपके मामले में वह क्षण है जब आप पृष्ठ में कहीं और क्लिक करते हैं)।

आप test विधि के लिए p:remoteCommand परिभाषित कर सकते हैं और बस लिखना:

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

और सेम समर्थन में:

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

यह एक आकर्षण की तरह काम कर रहा है! धन्यवाद! –

+0

मुझे इस मित्र से संबंधित कोई समस्या है, [यहां] (http://stackoverflow.com/q/14990692/1659451) –

+0

धन्यवाद। यह बहुत उपयोगी है। –

संबंधित मुद्दे