今までの説明は、サーバー側は刻々とデータが発生しており(それをキューイングして)クライアント側はそれを任意のタイミングで取得する際のシナリオです。
もう1つのシナリオとして、クライアントから要求があった場合のみサーバー側でデータを生成してそれを返す、というパターンがあります。
スケルトンソースのパッケージ直下に Json.java が存在します(スケルトン生成時に -json 引数を指定する必要があります)。以下のようなスケルトンソースが作成されます。
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
package paraselene.gui; import paraselene.gui.base.*; import paraselene.supervisor.*; import java.io.*; /** * JSON非同期通信。 */ public class Json extends paraselene.gui.base.Json { /** * 出力情報のハンドリングを行う。 * リクエストに応じて、固定のレスポンスを生成したい時はnull以外を返して下さい。 * nullを返すと、Ajaxクラスにキューイングされたものを使用します。 * @param req リクエスト内容。 * @return レスポンスするインスタンス。null可。 */ protected Serializable outputMain( RequestParameter req ) throws PageException { RequestItem item = req.getItem( KEY ); if ( item == null ) return null; String key = item.getValue( 0 ); // keyの内容に応じて、必要であればnull以外を返して下さい。 return null; } }
この outputMain で、クライアントに返したいインスタンスがあれば null 以外を返して下さい。ブラウザの JavaScript へ、ここでリターンしたインスタンスが通知されます。
ここで null を返すと、今までの説明であった Ajax クラスにてキューイングされているものを自動的に探し出して、それを返します。
補足となりますが、javascript側では paraselene_ajax_entryの呼び出し単位にクラス管理しています。 1つの HTML 中で、paraselene_ajax_entry を複数回呼び出すとそれぞれ独立して非同期通信を行い、個別管理されます。