2010-09-09 14 views
5

में एक विधि का आह्वान कैसे करें मैं एक जेएसएफ आवेदन बना रहा हूं। मैंने जीयूआई परिभाषित किया और चुनिंदा बयानों का चयन करके डेटाबेस से पूछताछ की।फ़ॉर्म इनपुट मान कैसे भेजें और जेएसएफ बीन

अब मुझे सम्मिलित बयान करना होगा, लेकिन मुझे नहीं पता कि एक जेएसएफ इनपुट घटक जैसे <h:inputText> और इसे मेरे बीन को भेजें जो सम्मिलित करता है।

मान faces-config.xml के माध्यम से मैप किया जाना चाहिए, तो क्या मैं इसे अपने जावा कोड में प्राप्त कर सकता हूं?

उत्तर

18

आप #{bean.property} की तरह एक ईएल अभिव्यक्ति, एक गेटर/सेटर जोड़ी द्वारा समर्थित के माध्यम से एक <h:form> में सभी <h:inputXxx>/<h:selectXxx> घटकों रख दिया और एक सेम संपत्ति के लिए अपने value विशेषता बाध्य करने के लिए की जरूरत है। जब उचित रूप से सेट किया जाता है, तो जेएसएफ स्वचालित रूप से बीन में मान सेट करेगा जब फॉर्म <h:commandXxx> घटक के माध्यम से उसी फ़ॉर्म में सबमिट किया जाता है। घटक की <h:commandXxx> घटक की की विशेषता के अनुसार action विशेषता में एक बीन एक्शन विधि निर्दिष्ट कर सकते हैं, जो नंगे विधि action() पर इंगित करता है। सभी सबमिट किए गए मान सामान्य जावा मार्ग पर तुरंत उपलब्ध हैं।

एक इनपुट क्षेत्र और एक का चयन क्षेत्र के साथ इस JSF प्रपत्र उदाहरण को देखते हुए:

<h:form> 
    <h:inputText value="#{bean.text}" required="true" /> 
    <h:selectOneMenu value="#{bean.choice}" required="true"> 
     <f:selectItem itemValue="#{null}" /> 
     <f:selectItem itemValue="One" /> 
     <f:selectItem itemValue="Two" /> 
     <f:selectItem itemValue="Three" /> 
    </h:selectOneMenu> 
    <h:commandButton value="submit" action="#{bean.submit}" /> 
    <h:messages /> 
    <h:outputText value="#{bean.result}" /> 
</h:form> 

निम्नलिखित stdout में सेम प्रिंट प्रस्तुत मूल्यों, साबित JSF पहले से ही पल आप का उपयोग करने से पहले लंबे समय से मूल्यों की स्थापना की है कि यह कार्रवाई विधि में है।

package com.example; 

import javax.inject.Named; 
import javax.enterprice.context.RequestScoped; 

@Named // Use @javax.faces.bean.ManagedBean on outdated environments. 
@RequestScoped // Use @javax.faces.bean.RequestScoped on outdated environments. 
public class Bean { 

    private String text; 
    private String choice; 
    private String result; 

    public void submit() { 
     result = "Submitted values: " + text + ", " + choice; 
     System.out.println(result); 
    } 

    public String getText() { 
     return text; 
    } 

    public void setText(String text) { 
     this.text = text; 
    } 

    public String getChoice() { 
     return choice; 
    } 

    public void setChoice(String choice) { 
     this.choice = choice; 
    } 

    public String getResult() { 
     return result; 
    } 
} 

यह सब कुछ है। नियमित रूप से एजेक्स फॉर्म में बदलना नीचे दिए गए कमांड घटक में <f:ajax> घोंसला करने का विषय है।

<h:commandButton value="submit" action="#{bean.submit}"> 
    <f:ajax execute="@form" render="@form" /> 
</h:commandButton> 

आप एक और उदाहरण और our JSF wiki page के तल पर मूल्यवान लिंक मिल सकता है।

ध्यान दें कि सबमिट किए गए मानों के साथ जो कुछ भी करना है, वह जेएसएफ की ज़िम्मेदारी से परे है। उदाहरण के लिए, इसे किसी अन्य वर्ग में गुजरना, इसे डेटाबेस में सहेजना आदि। इसमें से कोई भी जेएसएफ से संबंधित नहीं है। यह एक HTML फॉर्म आधारित फ्रेमवर्क होने के नाते पहले से ही उपयोग योग्य जावा चर के स्वाद में सबमिट किए गए मान प्रदान करने का अपना काम करता है। शेष आप पर निर्भर है।

अगले चरण की जांच करने के लिए, आपको इस बिंदु पर बस ऐसा करना चाहिए जैसे कि आप पहले से ही एक पूर्ण जेएसएफ आधारित यूजर इंटरफेस के बजाय तैयार/हार्डकोडेड चर का एक गुच्छा हो। उदाहरण के लिए, डेटाबेस में मानों को सहेजने के लिए, आम तौर पर लोग ईजेबी जैसे व्यवसाय सेवा परत ढांचे का उपयोग करते हैं जो बदले में जेपीए जैसे स्थिरता परत ढांचे का उपयोग करता है। कुछ लोग इसके लिए "सादे वेनिला" जेडीबीसी का भी उपयोग करते हैं। ठोस उदाहरणों के अधिक लिंक के लिए, यहां प्रारंभ करें: JSF Controller, Service and DAO

+0

अगर हम मानते हैं कि वहां एक इकाई वर्ग था जिसमें पाठ और संख्या गेटर्स/सेटर्स हैं, तो गेटर्स/सेटर्स को फिर से परिभाषित करने के बजाय उस इकाई का उपयोग करना संभव है? – hallaji

+0

@ हल्लाजी उत्तर में अंतिम लिंक जारी रखें। – BalusC

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