2012-03-28 8 views
7

मैं संबंधित डेटा ट्रैक करने के applicationScope, sessionScope, और viewScope कई JSON ऑब्जेक्ट का इस्तेमाल किया है। लेखन और SSJS में इन पढ़ने बहुत सरल है: `जावा में स्कॉप्ड वैरिएबल में मैं JSON ऑब्जेक्ट कैसे जोड़ सकता हूं?

//Create a app scope variable 
applicationScope.put("myvarname", {p1:"part 1", p2:"part2"}); 

// read and use the app scope variable ... 
var myvar = applicationScope.get("myvarname"); 
//Work with parts as myvar.p1, myvar.p2, etc... 

जावा कोड मैं लिख दिया है मैं इन चर जो com.ibm.jscript.std.ObjectObject पैकेज का उपयोग SSJS का उपयोग कर लिखा गया था पढ़ने के लिए सीखा है में इस तरह के कोड के साथ:

ObjectObject myvar = (ObjectObject) ExtLibUtil 
     .getApplicationScope().get(dbkey); 
FBSValue localFBS = myvar.get("p1"); 
String myp1 = localFBS.stringValue(); 
localFBS = myvar.get("p2"); 
String myp2 = localFBS.stringValue(); 

अब जाहिर है, मैं एक नई प्रविष्टि जावा बीन है कि तब एक ही तरीके से SSJS और अन्य जावा बीन्स द्वारा पढ़ा जा सकता का उपयोग कर लिखना चाहते हैं। मैं एक मानचित्र और एक हैशटेबल का उपयोग करके दायरे में लिखने में कामयाब रहा, लेकिन ऑब्जेक्टऑब्जेक्ट का उपयोग करके पढ़ने की कोशिश करते समय ये तर्क दुर्घटनाग्रस्त हो गए।

तो, मैं गुंजाइश ObjectObject और/या FBSValue संकुल का उपयोग करने में एक नई प्रविष्टि निर्माण के बारे में जाना होगा? मुझे कोई नया FBSValue बनाने का तरीका नहीं मिल रहा है जिसे ऑब्जेक्ट ऑब्जेक्ट में जोड़ा जा सकता है। मुझे यकीन है कि यह एक साधारण बात है कि मेरे जैसे न्यूब्स चूक गए हैं।

/newbs

उत्तर

6

आप, एक खाली ObjectObject निर्माण FBSValues ​​से पॉप्युलेट, और बस उसे सीधे डाल गुंजाइश मानचित्र में कर सकते हैं:

ObjectObject myvar = new ObjectObject(); 
try { 
    myvar.put("p1", FBSUtility.wrap("part 1")); 
    myvar.put("p2", FBSUtility.wrap("part 2")); 
} catch (InterpretException e) { 
    e.printStackTrace(); 
} 
Map<String, Object> applicationScope = ExtLibUtil.getApplicationScope(); 
applicationScope.put("myvarname", myvar); 

जब यह बाद में पुन: प्राप्त करने (उदाहरण के रूप में आपके द्वारा दी गई), एसएसजेएस इसे JSON के रूप में देखेगा, जावा इसे ठीक उसी तरह देखेगा जैसा इसे संग्रहीत किया गया था।

आप गहरी पदानुक्रम स्टोर करने के लिए की जरूरत है, तो आप ArrayObject और ObjectObject के उदाहरण एक ObjectObject अंदर पुरातन के अलावा डाल सकते हैं, हां, तो सिर्फ JSON की तरह ही, आप घोंसला इन के रूप में गहरी आप की जरूरत के रूप में कर सकते हैं।

बस सुनिश्चित करने के लिए ही सच्चा JSON (स्ट्रिंग, संख्याओं, बूलियन्स, सरणियों, वस्तुओं) शामिल हैं आप इसे requestScope से कहीं अधिक भंडारण हो जाएगा अगर; विशेष रूप से, FunctionObject Serializable को लागू नहीं करता, इसलिए JSON स्टोर करने के लिए सुरक्षित है, जावास्क्रिप्ट नहीं है। सच पूछिये तो, यह केवल विषाक्त हो जाता है जब 8.5.2 और 8.5.3 में viewScope में संग्रहीत (और फिर भी, स्मृति में सभी पृष्ठों को रखने के लिए केवल जब आवेदन के हठ विकल्प सेट नहीं है)। लेकिन यदि आईबीएम कभी क्लस्टर समर्थन लागू करता है, तो सत्र स्कोप और एप्लिकेशनस्कोप में संग्रहीत सभी ऑब्जेक्ट्स को इंटर-सर्वर राज्य परिवहन की अनुमति देने के लिए क्रमिक करने की आवश्यकता होगी ... इसलिए, भविष्य के प्रूफिंग डिज़ाइन के हित में, यह ध्यान रखना बुद्धिमानी है एक अनुरोध की अवधि से अधिक समय तक संग्रहीत कुछ भी के लिए सिद्धांत।

+0

धन्यवाद टिम, मैं जानता था कि आप इस सवाल का जवाब नहीं था। ऐसा लगता है कि इस एफबीएस सामान में बहुत सारे उपयोग हैं। तो "एफबीएस" क्या खड़ा है और इसे कहां दस्तावेज किया जा सकता है? – Newbs

+1

एफबीएस "फ्रेमबिल्डर स्क्रिप्ट" के लिए खड़ा है; इससे पहले कि यह XPages का हिस्सा था (और इससे पहले कि XPages बन गया था XFaces कहा जाता था), एसएसजेएस इंजन फ़्रेमबिल्डर का हिस्सा था, जिसे आईबीएम ने वर्कप्लेस में उपयोग के लिए अधिग्रहण किया था। जब कार्यस्थल फ्लाप्ड हो गया, तो उन्होंने यह पहचानने का प्रयास किया कि कहीं और उपयोग के लिए बचाया जा सकता है। एक्सफेस के पास कुछ मूल्य था, इसलिए उन्होंने इसे डोमिनोज़ में जोड़ने की कोशिश की ... और यहां हम हैं। अनजाने में, हालांकि, FBSValue और इसके वंशज घटक Javadoc में शामिल नहीं हैं: http://public.dhe.ibm.com/software/dw/lotus/Domino-Designer/JavaDocs/XPagesExtAPI/8.5.2/index.html –

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