質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

2回答

5886閲覧

【java】【サーブレットでcsvファイル読み込み】【jspにエラー文を出したい】

otabeb

総合スコア26

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

1クリップ

投稿2016/05/30 09:53

###前提・実現したいこと

JSPServletでcsvファイルを読み込むシステムを作っています。
【csvファイルの各セルが各字数制限を超えた場合(200文字以上でエラーです)、jspにエラー文を表示する】機能を実装中に以下の問題が発生しました。

###発生している問題・エラーメッセージ

【エラーした該当のセルを全てjspに表示させたいのですが、最後に読み込んだエラーのセルだけがjspに表示されてしまいます】

###該当のソースコード

(Servletです) for{i++ for{j++ csv[i][j] if(csv[i][j]≧ 200){ request.setAttribute(”errorMessage”、”エラー文”) ... ... ... ソースコードはもっと複雑なのですが、該当箇所についてまとめるとこのような記述になっています。

###試したこと
String型で変数を作って、右辺にはあらかじめcsvファイルを収めていたリストを代入しました。

エラー箇所をその都度足していって、最後にまとめてセットしようと判断しました。

String error ;
for{i++
for{j++
csv[i][j]
if(csv[i][j]≧ 200){

★error += list[i][j]

request.setAttribute(”errorMessage”、”エラー文”)
...
...
...

しかし、+=の部分でエラーになってしまいました。

どなたかアドバイスをよろしくお願いいたします。

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

A-pZ

2016/05/30 10:35

request.setAttribute(”errorMessage”,”エラー文”); は、request.setAttribute(”errorMessage”,error); で正しいでしょうか。エラーと言われている内容が、Javaの例外が出ているのか、それとも予期したメッセージが出ないで、特に例外が出ていないのか、を書くと、より回答に近づくかも知れません。
otabeb

2016/05/30 11:04

回答ありがとうございます。 正確には request.setAttribute(”errorMessage”,”csvエラー:” + list[i][j]); です。 例外は出ません。 セットアトリビュートのlist[i][j]の部分がどんどん上書きされて、結局は一番最後のエラー箇所だけが表示される...という事態です。
guest

回答2

0

追記ありがとうございました。確かに request.setAttribute("errorMessage" , エラーメッセージ内容)を毎回上書きしてしまっていますね。

その場合は、エラーメッセージを複数持てるよう、動的配列に持たせてしまうのが良いでしょうか。
一番かんたんなのは、java.util.ArrayListを使います。

ループの中では次のように

List<String> errorMessages = new ArrayList<String>(); ...ループ... errorMessages.add( list[i][j] ); ... ...ループ終了 request.setAttribute(”errorMessage”, errorMesssages);

とすることで、複数のメッセージがList型になって errorMessage の名前でリクエスト属性に格納されます。
あとはJSPにて、errorMessage の内容をループ処理で取り出すと良いかと。

投稿2016/05/30 12:40

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otabeb

2016/05/31 12:45

皆さま回答ありがとうございます!解決しました
guest

0

ベストアンサー

コードが断片的なので正確に原因を特定するのは少し難しいですが、

ここに書かれている情報で判断すると、
String errorが初期化されていないために、コンパイルエラーになっていると推測します。
String error = "";とすればコンパイルエラーは無くなると思います。

ただし、Stringをループの中で結合するとパフォーマンスが悪くなりますので、
StringBuilderというクラスを使ったほうが良いです。

lang

1StringBuilder errorValues = new StringBulder(); 2errorValues.append("csvエラー:"); // コンストラクターで指定しても良い 3 4// ...省略 5 6errorValues.append(list[i][j]); 7 8// ...省略 9 10String error = errorValues.toString(); 11request.setAttribute("errorMessage", error)

...

(追記)

ちょっと問題を読み違えていたところがありましたので追記しておきます。

変数は代入している前提なのですね。上にも書き足しておきます。

request.setAttribute("errorMessage", "エラー文")のところは、
ループでやってしまうと毎回errorMessageに上書きされるので、
上記のとおりループが終わった後で
request.setAttribute("errorMessage", error)とすれば良いです。

投稿2016/05/30 10:39

編集2016/05/30 11:16
argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otabeb

2016/05/31 12:45

皆さま回答ありがとうございます!解決しました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問