- - PR -
JavascriptからActionFormへの配列の受け渡しについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-11-18 19:32
こんにちは。EarlyHeroです。
JavascriptとStrutsを活用してWeb画面を作成しています。 以下の内容が実現可能かどうかのご判断を頂きたいと思い書き込みました。 やろうとしていることを時系列で表現します。 1.Javascript内に配列A(文字列型)を持つ 2.画面で処理が行われるとJavascriptの配列Aにそのデータをセットする 3.submitボタンが押されたらJavascript内の配列AをStrutsのActionFormの配列Bに渡す 4.StrutsのAction内で配列Bを加工する 5.StrutsのAction内で配列BをJavascriptの配列Aに渡す というような処理です。 何故このようなことを実現したいかと言うと、「2.」で処理がされた タイミングで何度もsubmitする実装を行いたくないからです。 ※submitで画面遷移する際に画面がちらつくのが今回ダメなのです。 処理の内容が抽象的で申し訳ございませんが、何かしらの方法で Javascriptの配列AとActionFormの配列Bを受け渡しできないでしょうか? ちなみに、今回のWeb画面ではAjaxを使用していないのですが、 やはりAjaxであれば実現可能なのでしょうか? 宜しくお願いします。 [ メッセージ編集済み 編集者: EarlyHero 編集日時 2008-11-18 19:45 ] | ||||
|
投稿日時: 2008-11-18 21:54
画面遷移なしで渡そうとするなら、Ajaxまたは見えないフレームを利用してsubmitするしかないですね。
| ||||
|
投稿日時: 2008-11-18 22:06
こんにちは。EarlyHeroです。
ご意見ありがとうございます。 そうですよね。Ajax使いますよね。 でも、先ほど浮かんだ案がありますので記載します。 多少強引ですが、 1.配列Aを文字列化する(要素間に区切り文字「,」を入れて「"要素1, 要素2, …"」) 2.文字列をhiddenタグのvalueへセットする(これでActionFormへ渡る) 3.Action側で文字列を受け取り、再度配列化して配列Bへセットする 4.配列のデータを加工する 5.画面に戻す場合は再度文字列化する 6.画面ロード時にhiddenタグからvalueを取得して、Javascriptで再度配列化して配列Aへセットする という方法です。 それ以外の方法は現状なさそうです。というか思い浮かびません。 [ メッセージ編集済み 編集者: EarlyHero 編集日時 2008-11-18 22:08 ] | ||||
|
投稿日時: 2008-11-19 00:00
サーバにはsubmitしないと渡りませんよ。 具体的な要件がイマイチ伝わってこないので何とも言えませんが、 本質的には最初の書き込みと変わらないと思います。 mioさんが仰る方法しかないでしょう。 | ||||
|
投稿日時: 2008-11-19 00:43
>サーバにはsubmitしないと渡りませんよ。
これは >「2.」で処理がされた タイミングで何度もsubmitする実装を行いたくない これの回数を減らすための工夫でしょうから、submit はするんでしょう。 10個配列に入れたら、10回ポストバックしていたのを、1回に減らせる ってことでしょ。 | ||||
|
投稿日時: 2008-11-19 09:10
おはようございます。EarlyHeroです。
ぴあちゃんさん、フォローありがとうございます。 仰るとおりsumitは行います。 前回の案であれば、 >2.文字列をhiddenタグのvalueへセットする(これでActionFormへ渡る) >3.Action側で文字列を受け取り、再度配列化して配列Bへセットする この「2.」と「3.」の間でsubmitを行います。 この方法であれば1回で済みます。 もちろん、mioさんやかつのりさんが仰るとおりAjaxを使うというのが 最適かもしれませんね。(今回は使わない方針ですが) ご意見ありがとうございました。 | ||||
|
投稿日時: 2008-11-19 11:37
僕は結構この手法を使いますね。 Ajaxだと検証が面倒になるのと、JavaScriptの記述が増えてせっかくStrutsを使っているのに処理と画面の分離性が失われるためです。 (後者は別にjsファイルを用意すれば済む話ですが。。。) 配列を文字列化する処理(上記3)とその文字列を配列に戻す処理(上記4)をstaticメソッドで定義して、それを使いまわすようにすれば他で同じような事をするケースが出てきてもルール化されているので安全だし、記述もかなり簡単になります。 |
1