2010-07-28 16 views
16

में अनुरोध पैरामीटर मान प्राप्त करें मेरे पास <odc:tabbedPanel/> घटक है। इसके अंदर मेरे पास <odc:bfPanel/> घटक में एक पृष्ठ है। मैं अपने <odc:tabbedPanel/> प्रबंधित बीन कक्षा में <odc:bfPanel/> में पृष्ठ से एक मान (इनपुटटेक्स्ट या रेडियोबुटटन) का उपयोग करना चाहता हूं। कृपया मुझे मार्गदर्शन करें कि मैं इसके बारे में कैसे जा सकता हूं। कृपया यहां ध्यान दें कि मैं यहां सत्र का उपयोग नहीं करना चाहता हूं। मैं इसे केवल अनुरोध में चाहता हूं। मैंने नीचे दिए गए विकल्पों का प्रयास किया है लेकिन उन्होंने मेरे लिए काम नहीं किया है।जेएसएफ

विकल्प एक

String value = (String) ctx.getExternalContext() 
         .getRequestParameterValuesMap() 
         .get("managedbean.property"); 

विकल्प दो

String value = (String) ctx.getExternalContext() 
         .getRequestParameterValuesMap() 
         .get("property"); 

विकल्प तीन

HttpServletRequest req = (HttpServletRequest) FacesContext.getCurrentInstance() 
         .getExternalContext().getRequest(); 
System.out.println(req.getParameter("property")); 

विकल्प चार

Map requestMap = FacesContext.getCurrentInstance() 
         .getExternalContext().getRequestHeaderValuesMap(); 
String msgId = (String) requestMap.get("property"); 
System.out.println(msgId); 

विकल्प पाँच

HttpServletRequestWrapper r = new HttpServletRequestWrapper(req); 
String value1 = r.getParameter("managedbean.property"); 

मैं jsp के प्रबंधित सेम में नहीं मूल्य चाहते हैं ... लेकिन मैं कुछ अन्य प्रबंधित सेम में यह चाहते हैं। यहां मेरे पास एक पृष्ठ के अंदर पृष्ठ हैं (जैसा कि मैंने इसका एक टैबड पैनल का उल्लेख किया था)। अब मैं बाहरी टैब के प्रबंधित बीन में मान चाहता हूं -

उत्तर

25

पहले इसका कारण बताने के विकल्प आप की कोशिश की काम नहीं किया है:

विकल्प 1 और 2 अमान्य हैं क्योंकि यह मान देता है (!!) एक String[], नहीं String के रूप में एक मूल्य के रूप में।

पैरामीटर वहां मौजूद होने पर विकल्प 3 को काम करना चाहिए। लेकिन यह एक अच्छा जेएसएफ-आश रास्ता नहीं है।

विकल्प 4 अमान्य है क्योंकि पैरामीटर अनुरोध शीर्षलेख में सेट नहीं हैं।

विकल्प 5 अमान्य है क्योंकि यह केवल कोई समझ नहीं आता है। आप केवल एक अतिरिक्त अमूर्त परत जोड़ रहे हैं जिसके बीच वास्तव में कुछ भी नहीं बदलेगा।


JSF-इश तरह से उपयोग करते हुए ExternalContext#getRequestParameterMap() होगा:

Map<String, String> parameterMap = (Map<String, String>) externalContext.getRequestParameterMap(); 
String param = parameterMap.get("paramName"); 

के रूप में क्योंकि पैरामीटर नाम आप क्या सोचते हैं/यह है की उम्मीद नहीं है यही कारण है कि विकल्प 3 काम नहीं करता है की संभावना है करने के लिए। जेएसएफ अर्थात् दृश्य पेड़ में माता-पिता UINamingContainer घटकों के आधार पर क्लाइंट आईडी तैयार करता है (वुडस्टॉक्स) क्लाइंट आईडी। अपने वेबब्रोसर में जेएसएफ पेज के जेनरेट किए गए एचटीएमएल आउटपुट पर राइटक्लिक करें और देखें स्रोत देखें। ब्याज के <input> तत्व के नाम की जांच करें। पैरामीटर नाम के रूप में नाम का उपयोग करें।


यह कहा गया कि यह एक समाधान के बाद समाधान नहीं है। लेकिन कार्यात्मक आवश्यकता के बाद से हम वास्तविक समाधान का उचित रूप से सुझाव नहीं दे सकते हैं और आपके पास मौजूद कोड पूरी तरह स्पष्ट नहीं है। आप सामान्य रूप से इनपुट तत्वों को बैकिंग बीन में बाध्य करते हैं। यदि आप वास्तव में एक अलग बैकिंग बीन के अंदर हैं, तो आप बैकिंग बीन के अंदर से बैकिंग बीन तक पहुंच सकते हैं और फिर इसके साथ इनपुट इनपुट को एक्सेस कर सकते हैं। कैसे करें के लिए Injecting Managed Beans in each other देखें।

0

मुझे बिल्कुल आपका प्रश्न नहीं पता है। यदि inputtext या radiobutton बैकिंग बीन में किसी मान के लिए सही ढंग से बाध्य है, तो आप सीधे जावा में मान तक पहुंच सकते हैं। क्या आप में रुचि रखते हैं एक प्रबंधित सेम के कार्यक्रम संबंधी देखने है, तो है कि मैं इसे कैसे करना है:

FacesContext facesContext = FacesContext.getCurrentInstance(); 
MyBean currentProperty = (MyBean) facesContext.getELContext().getELResolver().getValue(facesContext.getELContext(), null, "nameOfTheBackingBean"); 
2

तथ्य यह है कि अपने नियंत्रण आईबीएम ओडीसी पैनल के अंदर हैं प्रासंगिक नहीं है।

आमतौर पर, आप एक प्रबंधित बीन मान पर इनपुट नियंत्रण को बाध्य करेंगे।

बीन परिभाषा:

<managed-bean> 
    <managed-bean-name>demo</managed-bean-name> 
    <managed-bean-class>foo.MyManagedBean</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
</managed-bean> 

देखें टैग:

<!-- needs to be inside a form control --> 
<h:inputText value="#{demo.foo}" /> 
<h:commandButton value="Click Me" action="#{demo.invokeMe}" /> 

बीन:

package foo; 
public class MyManagedBean { 
    private String foo; 
    public String getFoo() { return foo; } 
    public void setFoo(String foo) { this.foo = foo; } 

    public String invokeMe() { 
    System.out.println(foo); 
    return null; //no navigation 
    } 
} 

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

<managed-bean> 
    <managed-bean-name>demo</managed-bean-name> 
    <managed-bean-class>foo.MyManagedBean</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
    <managed-property> 
    <property-name>propName</property-name> 
    <value>#{someExpression}</value> 
    </managed-property> 
</managed-bean> 

आप संदर्भ के माध्यम से सीधे ऊपर सामान देख सकते हैं, या कोड के माध्यम से सामान को हल करने अभिव्यक्ति वर्गों का उपयोग करें, लेकिन यह एक क्लीनर दृष्टिकोण है।

+0

मैं मान चाहता हूं कि जेएसपी के प्रबंधित बीन में नहीं है ... लेकिन मैं इसे किसी अन्य प्रबंधित बीन में चाहता हूं। यहां मेरे पास एक पृष्ठ के अंदर पृष्ठ हैं (जैसा कि मैंने इसका एक टैबड पैनल का उल्लेख किया था)। अब मैं बाहरी टैब – user265950

+0

@ tejas-a के प्रबंधित बीन में मान चाहता हूं - एक बीन से दूसरे में संपत्ति इंजेक्ट करने के लिए 'प्रबंधित-संपत्ति' का उपयोग करें - अंतिम अनुभाग देखें। – McDowell