javaの初心者です。フレームワークはSpringを使って開発しています。
Javaで改行の入った文字列をjspファイルでJava scriptでメッセージボックスに表示させたいのですが、「1行目\n2行目」と表示されてしまい、改行されません。
ソースを抜粋したものは、下記のとおりです。


コントローラ
@RequestMapping(value = "/pm", params = "nyuko", produces = "text/plain;charset=UTF-8", method = RequestMethod.POST)
public String nyuko(@ModelAttribute FormNyuko formNyuko, Model model, HttpServletRequest request,
HttpServletResponse response, HttpSession session, Map<String, String> map)
throws ServletException, IOException {

   String CRLF = "\n";
   ErrorMessage = "1行目" + CRLF
ErrorMessage = ErrorMessage + "2行目"
   map.put("ErrorMessage", ErrorMessage);
}


JSPファイル

<SCRIPT type="text/javascript">
function onLoad(){
if("${ErrorMessage}" != ""){
alert("${ErrorMessage}");
}
}
</script>

</head>
<body onLoad="onLoad()" bgcolor="#FFDAB9">


うまく改行させる方法を、どなかたご教授いただければ幸いです。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

No.1です。



一応、

<html>
<head>
<title>alear test</title>
<SCRIPT type="text/javascript">
function onLoad(){
if ("1行目\n2行目" != "") {
alert("1行目\n2行目");
}
}
</script>
</head>
<body onLoad="onLoad()" bgcolor="#FFDAB9">
body
</body>
</html>

という内容のhtmlファイルを作って、ブラウザで表示してみて大丈夫だったので、回答してしまったのですが、よく考えてみると、サーブレット側で
String CRLF = "\n";
とすると、function onLoadの部分が、

function onLoad(){
if ("1行目
2行目" != "") {
alert("1行目
2行目");
}
}

となってしまうかも知れませんね。
これは、改行がほんとの改行になってしまって、改行文字(\n)の指定にならなくなってしまうからです。

なので、
String CRLF = "\\n";
としてみてください。
これで、"\n"が"\n"のまま出力されます。
    • good
    • 0
この回答へのお礼

度重なる質問に対して、丁寧にご回答いただき、ありがとうございます!
とてもよく理解でき、解決することができました。
3日程職場でずっと悩んでいたので、助かりました。
ありがとうございました!

お礼日時:2017/04/19 14:09

これって、まさかと思うけど、"\n"を全角のバックスラッシュにしていませんか?



ここで質問するために、あえて全角のバックスラッシュ(\)にしているだけならいいのですが、本番では半角のバックスラッシュ(\:環境によっては半角の円記号になる)にしないと改行されませんよ。
String CRLF = "\n";
    • good
    • 0
この回答へのお礼

回答ありがとうございます!
実は、半角のバックスラッシュにもしてみました("\n"となりました)が、
それだと、メッセージボックスすら出ないのです。
ちなみに、エラーの画面にもなりません。
やはり、本来は"\n"だとすると、Java script内にバグがあるのでしょうか。

お礼日時:2017/04/19 11:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

Qjsp 改行コードで改行させて表示したい

はじめまして。

PostgreSQLから読み込んだ文字列データを表示させるtomcat+struts+servlet/jspを作成中です。
データの文字列に含まれる改行が、クライアントに表示された際に反映されず困っています。

過去ログも調べ、近い質問はありましたが、僕とは内容が微妙に違うようで、改めて質問させていただきました。


例えば、あるテーブルのある項目に、
A
B
C
というデータ(A,Bそれぞれの後に改行のある3行の文字列)があるとします。

これを読み込みaction form bean(と言うのですか?setter/getterを定義する関数です)を介してjspに埋め込むと、できあがるhtmlでは、
ABC
と改行されずに表示されます。

htmlで改行させるには「<BR>」が必要なのかと、データ文字列に0x0dや0x0a、または0x0d+0x0aがあれば「<BR>」に置き換えてaction form bean(?)のsetterに渡してjspを作ると、今度は、
A<BR>B<BR>C
と「<BR>」が文字列として表示されます。
htmlをソース表示すると、「A&lt;BR&gt;B&lt;BR&gt;C」で、親切にも「<」「>」をそれぞれ「&lt;」「&gt;」に勝手に置き換えあくまで文字列として表示してくれるようです。

試しに改行コードを「&lt;BR&gt;」に置き換えても予想通りその部分は
&lt;BR&gt;
とそのまま表示され、そのソースは「&amp;lt;BR&amp;gt;」でした。

「<」や「&lt;」等をそれぞれ「&lt;」「&amp;lt;」のように置き換える作業は、どこが行っているのでしょうか。
また、改行位置で改行させるにはどうすればよろしいでしょう。
OSはwindowsXPです。

無知ゆえに、つまらないことで悪戦苦闘しているのかも知れませんが、経験も浅くてよく解りません。

宜しくお願い致します。

はじめまして。

PostgreSQLから読み込んだ文字列データを表示させるtomcat+struts+servlet/jspを作成中です。
データの文字列に含まれる改行が、クライアントに表示された際に反映されず困っています。

過去ログも調べ、近い質問はありましたが、僕とは内容が微妙に違うようで、改めて質問させていただきました。


例えば、あるテーブルのある項目に、
A
B
C
というデータ(A,Bそれぞれの後に改行のある3行の文字列)があるとします。

これを読み込みaction form bean(と言うのですか?setter/...続きを読む

Aベストアンサー

私も経験が浅いので、分からない部分が多いのですが、

"<"や">"を置き換えるという機能は、
Javaというより、strutsが提供している機能らしいです。

"<"や">"を置き換える機能を持たせないと、
ユーザーが何かフォーマットに入力するときに、
JavaScriptを書き込んで、
例えば、alertを出し続けるようないたずらができてしまうので、
そういうことを防ぐために、変換機能を持っているのだと思います。
(具体的にどのタイミングで変換しているかは分からないのですが・・・)

単純に、画面上で改行された表示にしたいということであれば、
HTMLの<pre>タグを使うといいと思います。

-----------------------------
<pre>
A
B
C
</pre>
-----------------------------
という感じで、改行されて表示されると思います。
この方法でやるなら、改行コードを"<BR>"に置き換える処理はしないことになります。

少しでも手がかりになればと思い、書き込ませていただきました。

私も経験が浅いので、分からない部分が多いのですが、

"<"や">"を置き換えるという機能は、
Javaというより、strutsが提供している機能らしいです。

"<"や">"を置き換える機能を持たせないと、
ユーザーが何かフォーマットに入力するときに、
JavaScriptを書き込んで、
例えば、alertを出し続けるようないたずらができてしまうので、
そういうことを防ぐために、変換機能を持っているのだと思います。
(具体的にどのタイミングで変換しているかは分からないのですが・・・)

単純に、画面上で改行...続きを読む

QonClickに複数の関数を挿入する方法

初心者なのですがアニメーションの関数anime1、anime2、anime3を作成し、onClickに下記のように設定しました。
クリックするとアニメーション2つの設定ではは動くのですが、3つ目を設定すると動かなくなります。
通常はこのような設定はしないものなのでしょうか?
教えてください。
よろしくお願いします。
<INPUT type="button" value="START" onClick="anime1(), anime2()">・・・OKです。
<INPUT type="button" value="START" onClick="anime1(), anime2(),anime3()">・・・動きません。

Aベストアンサー

セミコロンでつなぐのが常道ですが、3つ以上なら
別途function化したほうが、可読性が高くなると
思います。

Qflush()とclose()について

Javaを独習Javaで独習しています。現在、入出力の所まできたのですが、Writerクラスのclose()とflush()の違いがわかりません。それぞれのメソッドの意味はわかるのですがそれらを使う目的がわかりません。flush()は「バッファ付けデータをそのストリームで表されている物理デバイスに書き込む」とあるのですが、サンプルには(バッファ付け文字ストリームの単元にも)flush()は一度も出てこずclose()のみで書き込みが行われています。探したのですが独習Javaのサンプルの中には結局flush()は一度も出てきませんでした。この二つの違いはなんなのでしょうか?初心者のためわかりにくい質問かとは思いますがよろしくお願いします。

Aベストアンサー

フラッシュすれば、ファイルやその他物理デバイスに強制的にバッファの内容が出力されるということは、理解されていると考えてよいですね?

で、なかなかストリームをクローズできない(またはしない)場合には、いつまで経ってもバッファの内容が物理デバイスに出力されないかも知れませんよね?でも、適当なタイミングで定期的にフラッシュすれば、その時点でバッファに溜まっている内容が物理デバイスに出力されます。

そのサンプルの場合は、書き出してすぐ?クローズしちゃうため、明示的なフラッシュは必要なかったんだと思いますが、

・フラッシュは、(ストリームを閉じずに)バッファの内容を強制的に物理デバイスに出力する。
・クローズは、(フラッシュされていなければフラッシュしてから)そのストリームを閉じる。

とまぁ、目的も内容も全然違うわけです。

QJava-jspの画面入力値保持について

画面にテキスト、ラジオボタン、リストボックス とボタンがあります。
ボタンを押すと、JAVAで処理を行い、jspのviewで表示します。

1.テキスト、ラジオボタン、リストボックスなどに値が入力、設定されている状態で
ボタンを押して処理後にテキスト、ラジオボタン、リストボックスの値が
変わらないようにしたいのですが、
その場合、たとえば、入力、設定値をセッションになどに格納しておき
jspの所で、セッションから値を設定すると言うような方法になるのでしょうか?

2.ボタン押して処理後、ラジオボタン、リストボックスの選択値も
  変えないようにしたいのですが、
  これはどのように実現するのが、適切なのでしょうか?


以上、よろしくお願いします。

Aベストアンサー

ボタンというのはフォームのサブミットボタンのことですよ?
つまり、画面遷移が起きることを前提とすると(元の同じ画面に戻るのも含みます)

テキスト、ラジオボタン、リストボックスの状態を「要求パラメータ」として
送信し、それを次画面に反映するというのが最も一般的な方法です。

フレームワーク struts のアクションフォーム&JSPカスタムタグを使うと比較的楽に
そういう画面が作れますが、多くのフレームワークでも大差ありません。
簡単な画面なら素のサーブレート+JSPでも十分作れます。

セッションでもできますが、 セッションはログイン情報などの保持など、
限定された範囲で使うのが普通です。また、結局セッションに最新の
テキスト、ラジオボタン、リストボックスの状態を送るには、「要求パラメータ」
を送信する必要があります。

AJAXを使うという方法もあります。この場合、ボタンは AJAX 処理だけを行い
画面遷移を起こさないので、サーバ側で画面のテキスト、ラジオボタン、
リストボックスの状態をもつ必要はありません。

QTEXTAREAからのデータを改行入りで表示したい

urizakaです。
さて現在、Tomcat+PostgreSQL+JavaでDBから持ってきたデータを
一度TEXTAREAに代入し、そこでデータの修正を行った後に、その修正
データを次の画面で表示するというプログラムを組んでいるのですが、
このTEXTAREAで入力したデータが、次の画面での表示の際にうまく
改行してくれません(改行なしで表示されます)。Tomcat上ではうまく
改行されて表示されているのですが・・・。
 いったいどうすれば、Web画面上でもうまく改行してくれるのでしょう?
「ソースコード(最初のページ)」
(前略)
<form name="form2" method="post" action="MContConf.jsp">
<p><font size="3"><b><font size="5">[改定]</font></b></font><BR>
<BR><TEXTAREA NAME="Cont2" ROWS="20" COLS="100" WRAP="hard">
 <%=mcont%></TEXTAREA></p>
<input type="submit" name="submit" value="上記フォームで送信">
</form>
(後略)

「ソースコード(次の画面)」
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=EUC-JP">
<%@ page contentType="text/html; charset=EUC_JP" %>
<%@ page import="BasisBean,java.util.*" %>
<jsp:useBean id="Basisbean" class="BasisBean">
<% //↓文字化け対策
String Content = Basisbean.cSet(request.getParameter("Cont2"));
//↓これでTomcatに表示させると、Tomcat上では改行して表示する
System.out.println("answer : " + Content);
%>
<html><body bgcolor="#FFFFFF" text="#000000">
<p align="center"><b>以下のような内容で送信します。</b></p>
<p><b><font size="4"><%=Content%></font></b></p></body>
</jsp:useBean></html>
Java環境はJ2SDK1.4です。
すみませんが、ご存知の方、よろしくお願いします。

urizakaです。
さて現在、Tomcat+PostgreSQL+JavaでDBから持ってきたデータを
一度TEXTAREAに代入し、そこでデータの修正を行った後に、その修正
データを次の画面で表示するというプログラムを組んでいるのですが、
このTEXTAREAで入力したデータが、次の画面での表示の際にうまく
改行してくれません(改行なしで表示されます)。Tomcat上ではうまく
改行されて表示されているのですが・・・。
 いったいどうすれば、Web画面上でもうまく改行してくれるのでしょう?
「ソースコード(最初のページ)」
...続きを読む

Aベストアンサー

申し訳有りません。自己レスです

>もしWindowsならばcrlfなので\r\nとなります。
>ですので\rのみ変換しても改行されてしまうと思われますがどうでしょう??
>replaceはchar単位での変換なのでindexOf等を使い変換ロジックを組んで
>見ればどうでしょうか??

replaceで変換されているのは\nでしたね。申し訳ありません。
ですが、replaceではchar単位での変換となるので、"<br>"という
文字列は変換できません。やはりindexOfを使うしかないと思います。

Qyyyymmddからyyyy/mm/ddへの変換

いつもお世話になっております。
Aと言う変数にはyyyymmddの値が入っていて
Aをyyyy/mm/ddにしてBの変数に入れたい場合の処理がわかりません。
調べたところ、SimpleDateFormatクラスと言うものを使えばよいと言うことが判明しました。
しかし、今まで使ったことがないのでよくわかりません。
変数Aと変数BはどちらもString型です。
ご教授お願い致します。

Aベストアンサー

 こんにちは。

 本当に変数aの中の文字列が厳密にyyyyMMddの形式のなっているのなら、普通に

String b = a.substring(0, 4) + "/" + a.substring(4, 6) + "/" + a.substring(6, 8);

 これでいいと思いますが、いったんDate型にする必要があったり、ちゃんと日付として認識できるか確かめる必要がある場合は、

String a = "20051029";

SimpleDateFormat formatter = (SimpleDateFormat)DateFormat.getDateInstance();
formatter.applyPattern("yyyyMMdd");
try {
  Date date = formatter.parse(a);
  formatter.applyPattern("yyyy/MM/dd");
  String b = formatter.format(date);
  System.out.println(b);
}
catch (ParseException ex) {
  System.out.println("解析失敗");
}

 こんな感じでいいんじゃないでしょうか。

 こんにちは。

 本当に変数aの中の文字列が厳密にyyyyMMddの形式のなっているのなら、普通に

String b = a.substring(0, 4) + "/" + a.substring(4, 6) + "/" + a.substring(6, 8);

 これでいいと思いますが、いったんDate型にする必要があったり、ちゃんと日付として認識できるか確かめる必要がある場合は、

String a = "20051029";

SimpleDateFormat formatter = (SimpleDateFormat)DateFormat.getDateInstance();
formatter.applyPattern("yyyyMMdd");
try {
  Date date = formatter.p...続きを読む

Qテーブルタグの中にdivを含めてはダメ?

テーブルタグの中にdiv要素を入れるとダメなのでしょうか?
何か不都合でもあるのでしょうか?
何かご存知の方がいれば教えていただけませんか?

Aベストアンサー

以下、HTML 4.01での話です。(XHTMLでもほぼ同じだと思います)

tableタグ直下に書けるのは、caption,col,colgroup,head,tfoot,tbodyと定義されています。
特定の条件下でtbodyが省略できますので、実際はtrも書けます。これら以外は書けないことになっています。
tr直下にはth,tdが書けることになっています(それ以外は不可)。

th,tdの下にはブロック要素が書けるので、divも書けます。

このように、テーブル内でth,tdの中以外でdivが使えないのはHTMLの仕様でそう決まっているからです。

QHTMLファイル同士での値渡し

困っています。

HTMLファイルからHTMLファイルへ移動するときに、
HTMLファイル1でJavaScript で算出された値を
HTMLファイル2へ渡して使用したいのです。

showModalDialogだとダイアログにしか渡せないし・・・。
このように、値をそのまま次のページに渡すための方法を教えてください。
お願いします。

Aベストアンサー

すみません。うっかりしてました。

document.write(FORM[v1]);
では、v1を変数と認識してしまうので、エラーになってしまいますね。

document.write(FORM.v1);  // 「FORM.v1」です
あるいは
document.write(FORM["v1"]);
としてください。

QgetName()で取得したファイル名を名前と拡張子に分割したい

現在JAVAで以下のようにプログラムし(一部ですが)、getName()によりFileの名前を取得し、配列に格納はできているのですが、今のプログラムだと出力しても例えば『HelloWorld.java』のように名前と拡張子が一緒に出力されてしまいます。
そこでなんとかして配列の出力部を
『HelloWorld』と『java』 のように名前、拡張子を別出力したいのでうがどうすればよいでしょうか?

fileTest = file.getName();
Object[] str ={fileTest,???????}; ←ここに別々に入れられるようにしたいのですが・・
                      イメージ的には{名前,拡張子}


このプログラムをどのように変更したらよいか教えていただけたら嬉しいです。修正点等お願いします。

Aベストアンサー

そんなに難しいことじゃないと思うけど……

fileTest = file.getName();
int index = fileTest.lastIndexOf('.');
String body, ext;
if (index >= 0) { //拡張子がある場合
body = fileTest.substring(0, index);
ext = fileTest.substring(index + 1);
} else { //拡張子がない場合
body = fileTest;
ext = null;
}
String[] str = { body, ext };

テストしてませんが、大体こんな感じです。

Qリンクをクリックした時にformからPOST送信したい。

HTML、PHP、JavaScript等でサイトを作っているのですが・・・。

【実現出来ている例】
<form name="form1" method="post" action="Next.php" onSubmit="return InputCheck()">
 <input type="submit" value="送信">
</form>
 submitボタンを一つ置いて、それがクリックされた場合に
formの内容をPOSTで送信する。

【実現したい例】
<form name="form1 method="post">
 <a href="Next.php" onClick="???">???</a>
</form>
 formの中のリンクをクリックされた場合に、formの内容を
POSTで送信したいのですが、その実現方法がわかりません。
GETで送るという手もあり得ますが、今回はどうしてもPOST
したいのですが。

Aベストアンサー

<form name="form1" method="post" action="Next.php">
<a href="#" onClick="document.form1.submit();">???</a>
</form>

onclick内の対象がform1としてあてているので、
アンカータグは別にform内に記述しなくても大丈夫です

form内にhidden等でnameとvalueを持ったパラメータがあればそれも送られます

アンカータグから動的にvalueを変更したい場合は、
document.form1.hogename.value = 'hoge';
等をsubmit()の前に行えば可能です

ただしform内に
<input type="hidden" name="hogename" value="">
を記述する等、変更先パラメータの元を用意する必要がありますのでご注意下さい


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング