dポイントプレゼントキャンペーン実施中!

あるWeb画面よりサブウインドウを開いてデータを選択、選択したら閉じて親ウインドウにデータを渡したいと思っております。
サブウインドウを閉じた時の親ウインドウへのデータの引継ぎ方法がよくわかりません。


●前提
・親ウインドウに選択ボタンがついている。
・選択ボタン押下したらキーを渡し、サブウインドウを起動しキーを渡す。
    ・window.open()でActionクラスを呼ぶ。
    ・ActionクラスがForm,State,DAO等よりデータを取得。
    ・"sucsess"にてサブウインドウを開く。→Struts使ってます。
・サブウインドウにはDBより検索された一覧が表示されている。
    ・選択できるようにラジオボタンも付いている。
    ・決定ボタンがついている。

    (作業中)

・親ウインドウに選択されたデータが表示されている。


この作業中のところでご質問です。
決定ボタンを押下したあと、データの引継ぎ方法がよくわかりません。
今はとりあえずwindow.close()で閉じるだけにしております。


稚拙な説明ですみません。
よろしくお願いします。

A 回答 (2件)

>ラジオボタンにて選択されたレコードを特定するところで詰まっております。


選択された部署コードからどうやって部署名を特定していいのかわからないということでよろしいでしょうか?(レコードという言葉はHTML上では使われませんので、もう少し具体的に書かれた方がわかりやすいです)

すぐに思いつく方法としては、
・Arrayの連想を使う(Array["部署コード"] = 部署名)
・<hidden id="部署コード" value="部署名">を埋めこんでgetElementByIdで取得する。
というところでしょうか・・・
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
下記のように、getElementById()で取得できるように書き直してみました。


<script language="JavaScript" type="text/JavaScript" />
<!--
function subWinClose2() //引数は無しです
{
i = 0;
n = 0;
do {
i++;
radioboxValue = document.getElementById("DeptTable").rows[i].cells[0].innerHTML;
result = radioboxValue.match(/CHECKED/g);
if (result == "CHECKED") {
bu_no = document.getElementById("DeptTable").rows[i].cells[1].innerHTML;
bu_name = document.getElementById("DeptTable").rows[i].cells[2].innerHTML;
n = 1;
}
} while (n == 0);
window.returnValue = bu_name ;
this.close();
}
//-->
</script>



<html:form action="KetteiAction.do">
<table border=1 id="DeptTable">
<tr>
<th>選択</th>
<th>部署コード</th>
<th>部署名</th>
</tr>
<logic:iterate id="list" name="empList" indexId="index">
<tr>
<td><html:radio idName="list" property="bu_no" value="bu_no" /></td>
<td><bean:write name="list" property="bu_no" /></td>
<td><bean:write name="list" property="bu_name" /></td>
</tr>
</logic:iterate>
</table>
<html:submit value="決定"/>
<input type="button" value="決定して閉じる" onclick="subWinClose2()">
</html:form>

これで親画面での戻り値に部署名が返ります。
この方法が妥当かと言われれば辛いところですが・・・
あとは親画面でのJavaScriptでどう部署コード欄、部署名欄に載せるのか?を考えていきたいと思います。
Javaから離れてきましたので、スレッドを変えて改めます。
ありがとうございます。

お礼日時:2005/07/06 15:11

Javaと無関係なのでJavaScriptの質問だと思いますが、方法論だけ・・・



A.サブウィンドウをモーダルでオープンし、returnValueを利用する。
B.サブウィンドウから親(parent)のフォームの値を直接変更する。

この回答への補足

ありがとうございます。

現状、window.showModalDialogでオープンし、returnValueで戻しております。

質問のタイトルとは少し離れますが、サブウインドウ内でデータの処理で詰まっております。

画面イメージ
親画面
-----------------------------------

....部署コード[ ]
....部署名....[ ] [選択]

-----------------------------------
<script language="JavaScript" type="text/JavaScript" />
<!--
function popup(***,***){
sub2 = window.showModalDialog("****Action.do?~", "", "~");
}
//-->
</script>


<form>
<input type="button" value="選択" onclick="popup(***,***)">
</form>


子画面
--------------------------------
選択 + 部署コード + 部署名
--------------------------------
....○..+.....0001.....+..人事部
....●..+.....0002.....+..技術部
....○..+.....0003.....+..営業部
--------------------------------
.......................[決定]
--------------------------------
子画面で技術部を選択し決定ボタンをクリックすることにより、子画面を閉じ、親画面に技術部の部署コードと部署名を戻したいのです。

<script language="JavaScript" type="text/JavaScript" />
<!--
function subWinClose2(bu_no)
{
<%
String returnValue = request.getParameter("現在コーディング中です");
%>
//window.returnValue = "33333";
window.returnValue = (現在コーディング中です);
this.close();
}
//-->
</script>


<html:form action="KetteiAction.do">
<table border=1>
<tr>
<th>選択</th>
<th>部署コード</th>
<th>部署名</th>
</tr>
<logic:iterate id="list" name="empList" indexId="index">
<tr>
<td><html:radio idName="list" property="bu_no" value="bu_no" /></td>
<td><bean:write name="list" property="bu_no" /></td>
<td><bean:write name="list" property="bu_name" /></td>
</tr>
</logic:iterate>
</table>
<html:submit value="決定"/>
<input type="button" value="決定して閉じる" onclick="subWinClose2(form.bu_no.value)">
</html:form>


現在、
決定ボタンよりKetteiActionを起動し、戻す方法と、
決定して閉じるボタンによりJavaScriptにて戻す方法と
模索しながら進めております。

親画面から子画面への遷移はOKです。
子画面でのDB検索もOKです。
ラジオボタンにて選択されたレコードを特定するところで詰まっております。

アドバイス頂けたら幸いです。
よろしくお願いします。

補足日時:2005/07/04 17:09
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!