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

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

ただいまの
回答率

88.33%

Java・JSP・サーブレットを使った掲示板作成

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 4,827

gamebox

score 13

背景

現在、javaを使って簡易掲示板を作成しています。
プログラムについては、参考書のサンプルを使い、
以下の機能を追加したいと考えています。

・入力フォームの未入力チェック(名前・メルアド・タイトル・内容)
・チェックに引っかかったものは、エラーメッセージを表示し、投稿しない。

以下のことを実現したいです。

--jsp側(入力画面)----

エラーメッセージ欄に表示させたい内容(全件未入力の場合)

名前が未入力です。
メルアドが未入力です。
タイトルが未入力です。

エラーメッセージ欄に表示させたい内容(1件未入力の場合)

メルアドが未入力です。

エラーメッセージは、現在文字列結合を使って表示させています。
String err_message = err1 + err2 + err3
request.setAttribute("err_message",err_message);
※err1・err2・err3は、個別にエラーメッセージを格納している。
これを上記のようにするには、どうしたら宜しいでしょうか?

現在の表示

(全件表示の場合)
名前は未入力です。メルアドが未入力です。タイトルが未入力です。

(1件表示の場合)
NULLNULLタイトルが未入力です。

ソースコード(参考書サンプル)

import java.io.*;  
import javax.servlet.*;  
import javax.servlet.http.*;

public class BBSServlet extends HttpServlet {

  ///////////////////// メンバ変数 ///////////////////

  ServletContext sc;  
  BBSManagerBeans bbsManager;

  ///////////////////// 初期化 ///////////////////

  public void init(ServletConfig config)  
      throws ServletException  
  {  
    super.init(config);  
    sc = getServletContext();

    String dataPath = config.getInitParameter("datapath");  
    if (dataPath == null) {  
      dataPath = "";  
    }

    bbsManager = (BBSManagerBeans)sc.getAttribute("bbsmanager");  
    if (bbsManager == null) {  
      bbsManager = new BBSManagerBeans(dataPath);  
      sc.setAttribute("bbsmanager",bbsManager);  
    }  
  }

  ///////////////////// "POST"メソッド ///////////////////

  public void doPost(HttpServletRequest request, HttpServletResponse response)  
      throws IOException, ServletException  
  {  
    doGet(request, response);  
  }

  ///////////////////// "GET"メソッド ///////////////////

  public void doGet(HttpServletRequest request, HttpServletResponse response)  
      throws IOException, ServletException  
  {  
    BBSDataBeans bbsData = new BBSDataBeans();

    String data = request.getParameter("function");  
    if (data == null) {  
      doBBSRead(request, response, bbsData);  
    }  
    else if (data.compareTo("WRITE") == 0) {  
      doBBSWrite(request, response, bbsData);  
    }  
    else if (data.compareTo("DELETE") == 0) {  
      doBBSDelete(request, response, bbsData);  
    }

    request.setAttribute("bbsdata",bbsData);  
    sc.getRequestDispatcher("/bbs.jsp").forward(request, response);  
  }

    bbsManager.DeleteItem(index, password);  
    bbsManager.ReadArticles(0, bbsData);  
  }

  ///////////////////// メッセージの投稿 ///////////////////

  public void doBBSWrite(HttpServletRequest request, HttpServletResponse response, BBSDataBeans bbsData)  
      throws IOException, ServletException  
  {  
    BBSItem item = new BBSItem();

    item.name     = KanjiConv.ConvJStr(request.getParameter("name"));  
    if (item.name == null)  
      item.name = "";

    item.email    = KanjiConv.ConvJStr(request.getParameter("email"));  
    if (item.email == null)  
      item.email = "";

    item.subject  = KanjiConv.ConvJStr(request.getParameter("subject"));  
    if (item.subject == null)  
      item.subject = "";

    item.content  = KanjiConv.ConvJStr(request.getParameter("content"));  
    if (item.content == null)  
      item.content = "";

    item.deleteKey  = KanjiConv.ConvJStr(request.getParameter("pass"));  
    if (item.deleteKey == null)  
      item.deleteKey = "";

    bbsManager.AddItem(item);  
    bbsManager.ReadArticles(0, bbsData);  
  }

  ///////////////////// メッセージの読み出す ///////////////////

  public void doBBSRead(HttpServletRequest request, HttpServletResponse response, BBSDataBeans bbsData)  
      throws IOException, ServletException  
  {  
    int index, lastIndex;  
    String strIndex = request.getParameter("index");  
    if (strIndex != null) {  
      index = Integer.parseInt(strIndex);  
    }  
    else {  
      index = 0;  
    }

    bbsManager.ReadArticles(index, bbsData);  
  }

  public void destroy()  
  {  
  }  
}

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

0

ヒントですが、

String err_message = err1 + err2 + err3 
request.setAttribute("err_message",err_message);

と一括でまとめている個所を、個別に

String err_message = err1 + err2 + err3 
request.setAttribute("err_message_1",err1);
request.setAttribute("err_message_2",err2);
request.setAttribute("err_message_3",err3);


として、JSPにもエラーメッセージを表示したい個所に、それぞれ値を表示するように実装すると個別表示できるでしょう。

ある程度慣れてきた後は、エラーメッセージ機能として統一できるかと思いますので、まずはかんたんな形で慣れるのが良いでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

個別ではなく一箇所にまとめて表示するなら以下のようなイメージでしょうか。

//改行コード
String BR = System.getProperty("line.separator");

StringBuilder sb = new StringBuil> 引用テキストder();
if(err1 != null){
//err1がnullでない時のみメッセージを保持
    sb.append(err1).append(BR);
}
if(err2 != null){
//err2がnullでない時のみメッセージを保持
    sb.append(err2).append(BR);
}
if(err3 != null){
    sb.append(err3).append(BR);
}

request.setAttribute("err_message",sb.toString());

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る