- PR -

[struts]javascriptのwindow.open()でformの値を取得する方法

投稿者投稿内容
java初心者
ベテラン
会議室デビュー日: 2007/07/23
投稿数: 54
投稿日時: 2007-08-22 10:31
nagise様
かつのり様
小僧様

皆様、ありがとうございます。

nagise様の手法で試させて頂いたところ、
ウィンドウ名のところを_blankにしてしまうと
遷移前の画面がポップアップされ、submit()のところで
javascriptエラーが発生致しました。

実験的にsubmit()を動かそうと再度試みましたが
strutsでは、submit()が動作しないようか感じがみられます。
→document.forms[0].submit();×

方法がないか、他に試してみたところ、下記の処理で、
ひとつのポップアップ画面でgamen2の表示ができたのですが、
この方法だと、最初にwindow.open()でgamen1をポップしたあとに、
同じwindowにgamen2を表示するため、[戻る]を押した際に、
gamen1が表示されてしまいます・・・。

-jsp------------------------------------------------------------------
<html:form action="/gamen1" target="gamen2">
<html:submit property="submit" value="送信" onclick="return submitOn />
<html:hidden property="item" />
</html:form>
----------------------------------------------------------------------

--js------------------------------------------------------------------
function submitOn() {

var w = screen.availWidth-10;
var h = screen.availheight-106;

document.forms[0].item.value= 'item';

win=window.open("/gamen1.do","gamen2","width=" + w + ",height=" + h + ",menubar=yes,scrollbars=yes,resizable=yes,left=0,top=26");
}
----------------------------------------------------------------------

スッキリする方法がございましたら、
アドバイスをお願い致します。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-08-22 10:40
おや?
要件を読み違えたかな。
別ウィンドウを開きたいのではなく、ウィンドウのサイズ変更をしたいだけ?
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2007-08-22 10:47
>遷移後の別画面でウインドウサイズの変更をする為に

開いたウインドウ側のbodyタグのonloadイベント内で、自身の
ウインドウサイズを変更すればいいのでは。業務システムで
そういった実装を行ったことがありますよ。

>actionを走らせた場合formの値を取得できないのですが、
>取得する方法はありますでしょうか?

開いたウインドウ側から元のフォームを参照するんだったら、
window.openerを使って参照すれば良いかと。

java初心者
ベテラン
会議室デビュー日: 2007/07/23
投稿数: 54
投稿日時: 2007-08-22 10:48
nagise様

ありがとうございます。

説明不足で申し訳ございません。
別ウィンドウを開きたいのは変わりなく、
それにプラスしてその別ウインドウのウインドウサイズも変更させます。

宜しくお願い致します。
java初心者
ベテラン
会議室デビュー日: 2007/07/23
投稿数: 54
投稿日時: 2007-08-22 11:27
小僧様

ありがとうございます。

自身のwindowサイズの変更だけでしたら、
問題ないのですが、→resizeTo()
他にscrollbarsやresizableの有無をしなくては
ならないため、方法としてはwindow.open()かなって思いまして・・・。
自身windowでscrollbarsやresizableの有無の設定をする関数があれば、
いいんですけど・・・。

開いたウインドウ側から元のフォームを参照については、
やらないです。すみません。

宜しくお願い致します。
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2007-08-22 14:41
引用:

問題ないのですが、→resizeTo()
他にscrollbarsやresizableの有無をしなくては
ならないため、方法としてはwindow.open()かなって思いまして・・・。
願い致します。



これは開いた側のウインドウではできないですね。

普通にgamen1アクションにサブミットして、そのレスポンスのbodyタグの
onloadでwindow.openする方法を使う場合もありますよ。

※最初の質問から派生してるのでわかりにくいですね・・・
java初心者
ベテラン
会議室デビュー日: 2007/07/23
投稿数: 54
投稿日時: 2007-08-22 16:53
小僧様

ありがとうございます。

gamen1アクションにサブミットして、
レスポンスのbodyタグのonloadでwindow.openする方法
というのは、イメージが出来ないのですが、

gamen2のbodyでonloadして、再度window.openするって
いうことでしょうか?

※最初の説明がかなり不足しておりました。
申し訳ございません。
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2007-08-23 00:49

[ブラウザ]
サブミットボタン

dummy.do  (A) ※空打ち用ダミーアクション。条件判定ができるならgamen1.doでもOK

↓ ※レスポンスで返すhtmlに <body onload="window.open("/gamen1.do","gamen2"...)"> を仕込む


[ブラウザ]
onloadイベントでgamen2ウインドウにgamen1.doの内容が表示される

セッションなんかが使えると、(A)の段階で最初に送信されたデータを保持して、
ポップアップしたウインドウ側で参照したりできます。hiddenやリクエストURL
のお尻にシリアライズした送信データなんかを付けてデータを渡す方法もあるん
ですが、データ改ざんの可能性を残すので、あまりお勧めできる方法とは思い
ません。バリデーションチェック後のデータをセッションに設定すると、以降
外部からデータ改ざんされないのがセッションのメリットの一つなんですけどね。


スキルアップ/キャリアアップ(JOB@IT)