私は願っていますここで意味をなさない、明らかにするものがあれば教えてください。
ボタンイベントのクライアントサイドスクリプトを単純に出力しようとしている場合は、JsonReferenceをまったく使用する必要はありません。あなたは単に文字列を使うことができます。
私のブログの記事では、JsonReferenceを使用する必要がある理由を明確にしていない可能性があります。カスタムUIComponentをレンダリングするプロセスでこのメソッドを使用していましたが、このプロセスの一部ではJsonオブジェクトのクライアントサイドを生成する必要がありました。これを行うために、JsonJavaObjectを作成した後、 'toJson'メソッドを使用して文字列に変換するように依頼しました。私の問題は、オブジェクト全体を文字列にするように要求したときに、文字列であったオブジェクトのすべてのプロパティが二重引用符で始まり、終わります。関数であることを意図したプロパティが ""で始まったり終わったりしなかったことを保証する必要がありました。 JsonReferenceを使用することで、JsonGeneratorはこれらの二重引用符を含めないようにする意向を表明しました。
あなたの場合は、onClickで何が起こるかを動的に判断しようとしているように見えます。これを行うには、単にJsonReferenceの代わりにStringを使用します。 'function(){}'は、イベントハンドラがページの最後にレンダリングされるときに生成されるため、不要です。例については
ここでは
JsonJavaObject obj = new JsonJavaObject();
String func = " alert('you clicked?'); ";
obj.put("onClick", func);
return obj;
そして、ここでJSON Javaオブジェクトになり、ボタンのようになります。
<xp:button id="button1" value="Alert Me">
<xp:eventHandler event="onclick" submit="false"
script="#{javascript: myBean.myObject.get('onClick')}">
</xp:eventHandler>
</xp:button>
これはあなたに見ての最終結果与えるべき「あなたがクリックしましたの?」警戒。
あなたはまた、「ソースの表示」や、お気に入りのWebブラウザ開発ツールを使用して、これは、すべてのページの終わり近くにスクリプトブロックで生成されたかを調べることができます。
function view__id1__id2_clientSide_onclick(thisEvent) {
alert('you clicked?');
}
XSP.addOnLoad(function() {
XSP.attachEvent("view:_id1:_id2", "view:_id1:button1", "onclick",
view__id1__id2_clientSide_onclick, false, 2);
});
私はどちらかといえばのISNを知ってみましょうそれが助けてくれることを願っています。
obj.onClickのように見えますが、この機能に対処できません。両方のメソッドを試しても何も起こりません(警告関数が呼び出されます)。 –
obj.onを画面(例:計算テキスト)に印刷すると、[email protected]と表示されます。それで、そこには、確立されたjsonreferenceへのフックがあるように見えます。それを利用する方法がわからない –
Cameronの記事で説明したように、JsonJavaObjectを返す前に文字列にシリアル化する必要があります。return JsonGenerator.toJson(JsonJavaFactory.instance、o、false); –