2012-02-09 17 views
0

データベースから文字列を取得するWebアプリケーションがあります。この文字列は非常に長くなることがあり、キャリッジリターンと二重引用符を含むことがあります。JavaScriptを使用して文字列を割り当てる

私の問題は、バックエンドでこの文字列をプルして、JavaScriptを使用してJSPページに表示しようとした後に、いくつか問題が発生します。 (ところで、アプリが使用するStruts2の)

最初のアプローチ:

<% String myString = (String)request.getAttribute("myVar"); %> 
<script LANGUAGE="JavaScript"> 
    document.getElementById('myTextArea').value =' <%= myString %> '; //this uses single quote 
</script> 

問題:

これがキャリッジリターンと非常に長い文字列(1000+チャー)と文字列を表示することができないが、文字列を表示することができます二重引用符を含む

第二のアプローチ:

<% String myString = (String)request.getAttribute("myVar"); %> 
<script LANGUAGE="JavaScript"> 
    document.getElementById('myTextArea').value = " <%= myString %> "; //this uses double quotes 
</script> 

問題:

これは、二重引用符とキャリッジリターンと文字列と文字列を表示することはできませんが、それは非常に長い文字列(1000 +文字)を扱うことができます。

引っ張った文字列を表示するには、二重引用符と非常に長いキャリッジリターンが含まれていますか?

おかげで、これを行うためにJavaScriptを使用する理由

+0

プレーンな文字列として書き出さないでください。生の文字列のJSメタキャラクタはJS構文エラーの原因になります。構文上有効なJSコードであることを保証するJSON文字列として出力します。 –

+0

プレーンなJavaScriptを使ってこれを処理する方法はありますか? – user1174960

+0

これは「プレーンなjavascript」とは関係がありません。これは、サーバーサイドのコードでJavaScript文字列を出力する方法の問題です。サーバーが構文エラーでJSコードブロックに文字列を出力する場合、スクリプトは実行されません。 –

答えて

0

は、なぜこれをしない:

コメントで述べたように
<pre> 
<%= myString %> 
</pre> 
+0

私は実際に文字列の値をテキストエリアに代入しています。私はdocument.writeを使っています説明のために()。 – user1174960

0

は、あなただけのJavaScript Object Notation(JSON)形式

Relevant Java Docsを使用する必要があります

0

サーバー側の文字列がBeam me down, chief O'Brienであるとします。あなたのコードは、この出力を生成してクライアントブラウザに送信します:

document.write('Beam me down, chief O'Brien'); 
       ^^^^^^^^^^^^^^^^^^^^^^^-----one string 
             ^^^^^ non-string 
              ^^^ new string 

アンバランスな引用符に注意してください。 BrienはJSには知られていないので、いい正常な文字列を持つかもしれませんが、構文的に違法なjavascriptです。その後、出力コードの最後の引用符により、トレーニング);は新しい未終了文字列リテラルの一部になります。

このように2つの構文エラーがあり、JSコードブロック全体が強制終了/無視されます。同様

、あなただけのすぐ上document.writeをやっているので、あなたが実際にしているだけで、ドキュメントのフロー内のその時点でのドキュメントにその文字列を書くことtryignので、あなただけかもしれない:

<%= myString %> 

と同じ効果を得て、JS構文の問題を心配する必要はありません。

あなたが絶対にJavascriptで書き出す必要がある場合は、その文字列をJSON文字列リテラルとして出力します。これは、構文的に有効なJavascriptであることが保証されています。

+0

申し訳ありませんが悪い例です。私は実際に値をテキストエリアに割り当てることを望んでいました。 – user1174960

+0

その後、 ''が動作します。 JSを関与させる必要はありません。 –

+0

ユーザーがチェックボックスなどをクリックしたときに値をテキストエリアに割り当てる場合はどうすればよいですか? – user1174960

0

コードを見てから。私はJavaScriptを使用する必要はないと思っています。あなたは、この長いプロセスを行う必要がないアクションクラスの定義された値で、ページの読み込み時にテキストフィールドを準備します。

私はmyVarがStrtuts2 Actionクラスのプロパティであり、Actionクラスでgetterとsetterを尊敬していると仮定しています。したがって、JSPページでtextfiledを満たすにはStruts2タグを使用するだけです。あなたの仕事のうち、

  1. ActionからmyVarの値を取得しています。
  2. それから値を取得しますと、あなたのJSPで

    <s:textfield name="myVar" value="%{myVar}/> 
    

    value="%{myVar}を次のコードを配置する必要があり

を(データ変換)をStringにに値を変換すると、あなたのための作業を行いますリクエスト(バリュースタック)し、テキストフィールドに目的の値を入力します。

あなたのJSPページにS2タグライブラリが含まれていれば、このタグのコードは単純なHTMLに変換され、HTML + Java -Script

+0

ありがとう、私もこれを試してみます。 – user1174960

0

<%= myString%>が有効です。いくつかのエフェクトが必要な場合は、このデータを隠しテキストに保存して、必要なときにデータを取り込むことができます。このjsメソッドを実行するときに、<%= myString%>で実行されているものと混同しないようにしてください。これは、JSPでの応答が作成される時点で実行されます。

関連する問題