サブウインドウAを開くボタンをクリックすると新しいウインドウ『A-1』が開きます。
サブウインドウBを開くボタンをクリックすると新しいウインドウ『B』が開きます。
メッセージをセションに設定ボタンをクリックするとメッセージに入力された値がセションに格納されます。
新しく開かれたサブウインドウの更新ボタンをクリックするとセションよりメッセージを取り出し表示します。
このことにより各画面間のデータ受け渡しはセションを使用して行えることが確認できます。
≪作成時注意点≫
・複数のウインドウを同一セション内で表示するには以下の点に注意が必要です。
・JavaScript等で新たなウインドウを作成する時には指定するURLに__PIRKA__INS__
パラメータを追加して任意のインスタンス名を指定してください。
pirkaはインスタンス名毎にデータの自動保存管理を行います。
【例】URLがhttp://localhost/pirkaSample/sampleのときに別ウインドウを開く場合
<input type="button" value="サブウインドウAを開く"
onClick="window.open('./sample?__PIRKA__INS__=AWIN,'subA','');">
・別ウインドウを使用するときはEntryPointクラスから派生したクラスを作成します。
そのクラスのgetSubWindowメソッドが戻すPirkaWindowオブジェクトが別ウインドウに表示されます。
【例】別画面としてSubWin02を表示する
protected PirkaWindow getSubWindow(Map<String, String[]> reqMap) {
return new SubWin02();
}
・別画面内での画面遷移はメインの画面同様に自由に遷移することができます。
・WEBサーバー内での別画面間のデータの受け渡しははセションを使用してください。
ブラウザ内ではJavascript等で行ってください。
【例】textareaフィールドの入力値をキー名="msg"でセションに保存するとき
putSession("msg", field.getValueString("textarea"));
【例】セションにキー名="msg"で保存されているデータを取り出すとき
String msg = (String) getSession("msg");
・インスタンス名とウインドウ名(上記例ではsuba)の組み合わせを
常に一定にしておくと開かれる画面とpirika内で管理されるデータの整合性が保たれ、
予期せぬ障害を回避できます。
ソースファイル
ReverseLookupEntryPoint.java エントリーポイントのJavaソースファイル
package jp.oarts.pirka.sample;
import java.util.Map;
import jp.oarts.pirka.core.app.EntryPoint;
import jp.oarts.pirka.core.win.PirkaWindow;
import jp.oarts.pirka.sample.instruction.is102800.SubWinSubA1;
import jp.oarts.pirka.sample.instruction.is102800.SubWinSubB;
/**
* pirka逆引きサンプル エントリーポイント
*/
public class ReverseLookupEntryPoint extends EntryPoint {
/**
* 初画面を返します
*
* @return 初画面
*/
@Override
protected PirkaWindow getInitWindow(Map<String, String[]> reqMap) {
return new ReverseLookup();
}
/**
* サブ画面を返します(複数ウインドウの表示方法サンプルで使用されます)
*
* @return サブ画面
*/
@Override
protected PirkaWindow getSubWindow(Map<String, String[]> reqMap) {
String[] params = reqMap.get("win");
if (params != null && params.length > 0) {
if ("A".equalsIgnoreCase(params[0])) {
return new SubWinSubA1();
}
if ("B".equalsIgnoreCase(params[0])) {
return new SubWinSubB();
}
}
return null;
}
}
<html>
<head>
<head>
<title>pirka逆引きサンプル 複数ウインドウの表示方法</title>
</head>
<body>
<center>
<span style="color: #8080ff">pirka逆引きサンプル 複数ウインドウの表示方法</span><br>
<hr>
<br>
<form name="testForm" method="post">
メッセージ <textarea name="textarea" warp="soft" rows="5" cols="50"></textarea><br>
<input type="submit" name="execButton" value="メッセージをセションに設定"><br><br><br>
<input type="button" value="サブウインドウAを開く"
onClick="window.open('./reverse?__PIRKA__INS__=AWIN&win=A','subA','toolbar=no,location=no,
directories=no,width=200,height=200,left=0,top=0');"><br>
<input type="button" value="サブウインドウBを開く"
onClick="window.open('./reverse?__PIRKA__INS__=BWIN&win=B','subB','toolbar=no,location=no,
directories=no,width=200,height=200,left=210,top=0');"><br><br>
<input type="submit" name="returnButton" value="戻る"><Br>
</form>
</center>
</body>
</html>
package jp.oarts.pirka.sample.instruction.is102800;
import jp.oarts.pirka.core.kernel.FieldMap;
import jp.oarts.pirka.core.win.PirkaWindow;
/**
* pirka逆引きサンプル 複数ウインドウの表示方法
*/
public class SubWinSample extends PirkaWindow {
/**
* メッセージをセションに設定するボタン処理
*
*/
public void execButton() {
FieldMap field = getFieldMap();
putSession("msg", field.getValueString("textarea"));
}
/**
* 戻るボタンが押された時の処理<BR>
*/
public PirkaWindow returnButton() {
return null;
}
}
<html>
<head>
<head>
<title>pirka逆引きサンプル 複数ウインドウの表示方法 【A-1】</title>
</head>
<body style="background-color: #b0b0b0">
<center>
<span style="color: #ffffff">サブ画面【A-1】</span><br>
<form name="testForm" method="post">
<table>
<tr>
<td>メッセージ</td>
<td style="background-color: #c0ffc0"><pre><span name="msg"></span></pre></td>
</tr>
</table>
<input type="submit" name="execButton" value="メッセージ更新"><br><br>
<input type="submit" name="nextButton" value="次画面"><br><br>
</form>
</center>
</body>
</html>
package jp.oarts.pirka.sample.instruction.is102800;
import jp.oarts.pirka.core.kernel.FieldMap;
import jp.oarts.pirka.core.win.PirkaWindow;
/**
* pirka逆引きサンプル 複数ウインドウの表示方法 サブ画面A-1
*/
public class SubWinSubA1 extends PirkaWindow {
/**
* 表示前に呼ばれるメソッド
*/
public void preDraw() {
String msg = (String) getSession("msg");
FieldMap field = getFieldMap();
field.setValue("msg", msg == null ? "" : msg);
}
/**
* 次画面ボタン処理
* @return 次ウィンドウ
*/
public PirkaWindow nextButton() {
return new SubWinSubA2();
}
}
<html>
<head>
<head>
<title>pirka逆引きサンプル 複数ウインドウの表示方法 【A-2】</title>
</head>
<body style="background-color: #ffffff">
<center>
<span style="color: #000000">サブ画面【A-2】</span><br>
<form name="testForm" method="post">
<table>
<tr>
<td>メッセージ</td>
<td style="background-color: #c0ffc0"><pre><span name="msg"></span></pre></td>
</tr>
</table>
<input type="submit" name="execButton" value="メッセージ更新"><br><br>
<input type="submit" name="returnButton" value="前画面"><br><br>
</form>
</center>
</body>
</html>
package jp.oarts.pirka.sample.instruction.is102800;
import jp.oarts.pirka.core.kernel.FieldMap;
import jp.oarts.pirka.core.win.PirkaWindow;
/**
* pirka逆引きサンプル 複数ウインドウの表示方法 サブ画面A-2
*/
public class SubWinSubA2 extends PirkaWindow {
/**
* 表示前に呼ばれるメソッド
*/
public void preDraw() {
String msg = (String) getSession("msg");
FieldMap field = getFieldMap();
field.setValue("msg", msg == null ? "" : msg);
}
/**
* 前画面ボタン処理<BR>
* nullで前画面表示
*
* @return null
*/
public PirkaWindow returnButton() {
return null;
}
}
<html>
<head>
<head>
<title>pirka逆引きサンプル 複数ウインドウの表示方法 【B】</title>
</head>
<body style="background-color: #ffffc0">
<center>
<span style="color: #000000">サブ画面【B】</span><br>
<form name="testForm" method="post">
<table>
<tr>
<td>メッセージ</td>
<td style="background-color: #c0ffc0"><pre><span name="msg"></span></pre></td>
</tr>
</table>
<input type="submit" name="execButton" value="メッセージ更新"><br><br>
</form>
</center>
</body>
</html>
package jp.oarts.pirka.sample.instruction.is102800;
import jp.oarts.pirka.core.kernel.FieldMap;
import jp.oarts.pirka.core.win.PirkaWindow;
/**
* pirka逆引きサンプル 複数ウインドウの表示方法 サブ画面B
*/
public class SubWinSubB extends PirkaWindow {
/**
* 表示前に呼ばれるメソッド
*/
public void preDraw() {
String msg = (String) getSession("msg");
FieldMap field = getFieldMap();
field.setValue("msg", msg == null ? "" : msg);
}
}