Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

javaの変数をjavascriptで使う方法

いつもお世話になっております。
凄く初歩的な質問だと思いますが知恵をお貸し下さい。

Strutsを使い開発を行なっております。
画面のリフレッシュ時に、n個のチェックボックスの値を保持するため以下のような手順を踏んでいます。

1:ボタン押下時、チェックボックスの状態をjava側に受け渡す
 (String[]形式)
2:java側で受け取った変数をカンマ区切りのStringに変換
3:request.setAttributeを使いカンマ区切りの変数をjspに返す
 (中身は「1,3,5」の様になります)

この状態で、jsp上から以下の様にdefineタグでString文字列を取得すると何故か最初のカンマから後ろが表示されません(alertで「1」と表示される)

<nested:define id="_chkStatus" name="COMMON_INFO" property="chkStatus" type="java.lang.String"/>
<script type="text/javascript">
  alert(<%= _chkStatus %>);
</script>

正しく「1,3,5」と取得させるためにはどの様に記述すればよろしいのでしょうか?

4

回答

10144

閲覧

4件の回答

評価

0

あれから試行を繰り返し、原因になっている現象がわかりました。

区切り文字が悪いのかと、「,」を「-」にしてみて、10個あるチェックボックスの7〜9番目にチェックを入れて処理を実施してみると、alertの返り値で「-9」と表示されました。
チェックボックスの名称は0番から連番で振っているので、7〜9番目にチェックを入れてjavaに変数を送ると「6-7-8」となり、それをjavascriptに戻した際に数字として認識されて計算されているようです。

但し、java側ではStringで管理していますし、defineタグのtypeも"java.lang.String"としているので、本来なら文字列として認識しなくてはならず、そのせいで不具合が起こっていると予想されます。

どなたかこの解決策が分かる方は居らっしゃらないでしょうか?

評価

0

解決したのでメモ書きとして

結論としては受け取った値に対しそのまま使おうとしていたのが問題でした
""で括らないと文字列として見てくれないようで・・・

=======================
<nested:define id="_chkStatus" name="COMMON_INFO" property="chkStatus" type="java.lang.String"/>
<script type="text/javascript">
  alert(<%= _chkStatus %>);
</script>

↓以下のように修正

<nested:define id="_chkStatus" name="COMMON_INFO" property="chkStatus" type="java.lang.String"/>
<script type="text/javascript">
  alert("<nested:write name='_chkStatus' />");
</script>

=======================

お騒がせしました

評価

0

この質問は非常に多く、検索すればいくらでも出
てくるんだが、ほとんどの場合
「実行タイミングを理解していない」
ケースだな。
ブラウザで右クリックしてソースを見れば一発で
分かる(書いたそのままの形でブラウザに来てな
い)のだが。

評価

0

nested:write をまなぼうよ

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。