2012-03-28 8 views
7

applicationScope、sessionScope、およびviewScopeで多くのJSONオブジェクトを使用して、関連するデータを追跡しました。ライティングとSSJSにこれらを読んで非常に簡単です:私はcom.ibm.jscript.std.ObjectObjectパッケージを使用してSSJSを使用して作成されたこれらの変数を読むことを学んだ書いているJavaコードで `Javaのスコープ付き変数に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... 

このようなコードを:今

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およびその他のJava Beansので読み取ることができるJava Beanの使用して、新しいエントリを書きたいです。私は、MapとHashtableを使ってスコープに書き込むことができましたが、ObjectObjectを使って読み込もうとすると、ロジックがクラッシュします。

ObjectObjectおよび/またはFBSValueパッケージを使用してスコープ内に新しいエントリを作成するにはどうすればよいですか? ObjectObjectに追加できる新しいFBSValueを作成する方法を見つけることができません。私は、私のようなNewbsが逃したのは簡単なことだと確信しています。

/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); 

(あなたが提供されている例のように、後でそれを取得する場合)、SSJSはそれをJSONとして見て、Javaはそれが格納されたのとまったく同じように見ます。

より深い階層を格納する必要がある場合は、プリミティブに加えてArrayObjectとObjectObjectのインスタンスをObjectObjectの中に入れることができます.JSONと同じように、必要に応じてネストすることができます。

trueのJSON(文字列、数値、ブール値、配列、オブジェクト)は、requestScopeよりも高い場所に格納する場合にのみ含めてください。具体的には、FunctionObjectはSerializableを実装していないので、JSONは安全です。JavaScriptはありません。厳密に言えば、これは8.5.2と8.5.3のviewScopeに格納されたときにのみ有毒になります(アプリケーションの永続性オプションがすべてのページをメモリに保持するように設定されていない場合でも)。しかし、IBMがこれまでにクラスター・サポートを実装している場合、sessionScopeとapplicationScopeに保管されているすべてのオブジェクトは、サーバー間の状態転送を可能にするために直列化可能である必要があります。そのため、将来的に設計を念頭に置いて、単一の要求の期間より長く保管されたものの原則。

+0

ありがとう、ティム、私はあなたに答えがあることを知っていた。このFBSには多くの用途があるようです。だから、「FBS」は何を表しているのか、それはどこに文書化されるのでしょうか? – Newbs

+1

FBSは "framebuilder script"の略です。それがXPagesの一部となる前(そしてXPagesがXFacesと呼ばれる前でさえ)、SSJSエンジンはFrameBuilderの一部であり、IBMがWorkplaceで使用するために取得しました。職場が飛び去ったとき、彼らは何が他の場所で使用するために回収できるかを特定しようとしました。明らかにXFacesには価値があったので、Dominoに追加しようとしました...そしてここにいます。ただし、FBSValueおよびその子孫はJavadocコンポーネントには含まれていません。http://public.dhe.ibm.com/software/dw/lotus/Domino-Designer/JavaDocs/XPagesExtAPI/8.5.2/index.html –

関連する問題