- PR -

strutsのhtmlタグがHTMLに変換された際のダブルクォーテーションのエスケープについて

1
投稿者投稿内容
Java使い
常連さん
会議室デビュー日: 2006/08/16
投稿数: 22
投稿日時: 2006-08-17 00:41
JSPファイルの中で、JavaScriptの関数を呼び出そうとしています。
JavaScriptの関数内にstrutsのhtmlタグ記述があります。
下記は関数の例です。

function ex() {
com.innerHTML = "<html:form action="/TestAction"> …いろいろ… </html:form>";
}

これがコンパイルされて最終的に出力されるHTMLは、下記のようになります。

function ex() {
com.innerHTML = "<form name="TestActionForm" method="post" action="/hogehoge/TestAction.do"> …いろいろ… </form>";
}

この出力されたJavaScriptはダブルクォーテーションのエスケープがされておらず、
正しく動作しません。

function ex() {
com.innerHTML = "<form name=\"TestActionForm\" method=\"post\" action=\"/hogehoge/TestAction.do\"> …いろいろ… </form>";
}

このようなJavaScriptを出力できれば、正しく動作すると思うのですが、
JSPをこのように出力させることはできるのでしょうか。

または、他の解決法があればご教授ください。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-08-17 00:51
試していないですが、
function ex() {
com.innerHTML = '<html:form action="/TestAction"> …いろいろ… </html:form>';
}

じゃダメですか?シングルクォーテーションなら
ダブルクォーテーションをエスケープしなくてもいいと思うのですが。

あと、一旦不可視のDIVの中に書き出してから、
innerHTMLで拾うというのもありかと思います。
Java使い
常連さん
会議室デビュー日: 2006/08/16
投稿数: 22
投稿日時: 2006-08-17 11:53
シングルクォーテーションを使うことで、ダブルクォーテーションの問題は解決できそう
なのですが、また別の問題がでてきました。

「…いろいろ…」の部分にhtml:optionsタグがあるのですが、
これがHTMLになったときに、1行でなく複数行として展開されるので、
そこで切れてしまっているようです。

こんな感じです。
</option>の後に\を付けられれば解決しそうですが、これは無理ですよね。

com.innerHTML = ' …
<select name="target">\
<option value="0" selected="selected">あああ</option>
<option value="1">いいい</option>
…';

> あと、一旦不可視のDIVの中に書き出してから、
> innerHTMLで拾うというのもありかと思います。

こちらの方法が良くわからないので、詳細を教えていただけないでしょうか。
DOMを使うということでしょうか。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-08-17 12:16
コード:
-------------------------HTML
<div id="hoge" style="display:none">
ここの中に書き出す
</div>

-------------------------スクリプト
function ex() { 
    com.innerHTML = hoge.innerHTML;
} 


って感じです。
Java使い
常連さん
会議室デビュー日: 2006/08/16
投稿数: 22
投稿日時: 2006-08-19 19:51
ありがとうございます。うまくいきました。
1

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