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

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

ただいまの
回答率

90.50%

  • Java

    15847questions

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

入力フォーム欄の入力チェックとエラーメッセージ表示・投稿処理停止

受付中

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 7,888

gamebox

score 7

背景

java(jsp/サーブレット)を使って、簡易掲示板を作っています。 
ところが、この掲示板は入力チェックを行っていないため、
チェック機能が必要です。 どのようにやったら良いかわかりません。
アドバイスを頂けないでしょうか?

実現したいこと

・入力フォーム欄の入力チェック(空白・最大文字数など)
・入力チェックで、引っかかったものは、エラーメッセージ表示
・エラーメッセージがあるとき、投稿処理を行わない。

ソースコード(jsp)

<%@ page contentType="text/html; charset=Shift_JIS" %>
<jsp:useBean id='bbsdata' scope='request' class='BBSDataBeans' type="BBSDataBeans" />

<HTML><HEAD><TITLE>JSP掲示板</TITLE>

<BODY TEXT=#ffffff VLINK=#ff0000 LINK=#ff8888 BGCOLOR=#000000>
<CENTER><H1>JSP掲示板</H1></CENTER>

<FORM action=bbsserv method=post>
<HR>
<INPUT type=hidden value="WRITE" name=function>
名前:
<INPUT maxLength=20 size=21 name=name><BR>
メルアド:
<INPUT size=40 name=email><BR>
タイトル:
<INPUT maxLength=50 size=51 name=subject><BR>
内容:<BR>
<TEXTAREA name=content rows=5 wrap=off cols=70></TEXTAREA><BR>
<FONT size=-1>
<BR>
削除用暗証番号
<INPUT type=password size=10 name=pass>
<P>
<CENTER><INPUT type=submit value=" 投 稿 "></CENTER>
</FORM>

<FORM action=bbsserv method=post>
<HR SIZE=4>

<!---------------------------------------------->
<%!
  int i, j;
%>
<%
  for(i = 0; i < bbsdata.getNumOfItems(); i ++) {
%>
<FONT SIZE=+2 COLOR=GREEN><B><U><%=  bbsdata.getSubject(i) %></U></B></FONT><BR>
<B>名前:</B><%=  bbsdata.getName(i) %>
<B>メール:</B><A HREF="mailto:<%=  bbsdata.getEmail(i) %>"><%=  bbsdata.getEmail(i) %></A>
<input type=checkbox name="delIndex" value="<%=  bbsdata.getIndex(i) + i %>">削除

<P>
<%=  bbsdata.getContent(i) %><BR>
    <HR>
<%
  }
%>

<!---------------------------------------------->

<HR SIZE=4>

<TABLE BORDER=0>

<TR>
<TD>

<P>
暗証番号入力:
<INPUT type=hidden value="DELETE" name=function>
<INPUT type=password size=10 name=pwd>
<INPUT type=submit value="削除"><BR>
</FORM>

</TD>
<TD WIDTH=50></TD>
<TD>

</TD>
</TR>

</TABLE>

<!---------------------------------------------->

<HR SIZE=4>

<%
  if (bbsdata.getNumOfItems() != bbsdata.maxItemsPerPage) {
        %><CENTER>最後のページです</CENTER><%
    }
    else {
        %><CENTER><FORM action=bbsserv method=POST>
        <INPUT type=hidden value=<%=  bbsdata.getLastIndex() + 1 %> name="index">
        <INPUT type=submit value="次のページ">
        </FORM></CENTER><BR><%
    }
%>

</BODY></HTML>

ソースコード(サーブレット)

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);
  }

  ///////////////////// メッセージの削除 ///////////////////

  public void doBBSDelete(HttpServletRequest request, HttpServletResponse response, BBSDataBeans bbsData)
      throws IOException, ServletException
  {
    String delindex = request.getParameter("delIndex");
    if (delindex == null) {
      bbsManager.ReadArticles(0, bbsData);
      return;
    }
    int index = Integer.parseInt(delindex);

    String password = request.getParameter("pwd");
    if (password == null) {
      bbsManager.ReadArticles(0, bbsData);
      return;
    }

    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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

0

入力チェックを実行した結果、エラーだと判定した結果をメッセージに表示し、もとの画面を再度表示するのでしたら、以下のようにすると良いでしょう。

  • エラー情報を格納する領域を リクエスト属性に作る、というルールを作る(例えば、属性名がerror_から始まるものはエラー情報を格納するものと決める)
  • なんらかのエラーがあった場合は、
    (1)エラー情報をリクエスト属性に格納し、
    (2)登録処理を行わず、もとの入力画面へ戻る
    ※例えば、入力パラメータ emailにエラーがあった場合は次のようにする
    request.setAttribute("error_email","emailに誤りがあります");
  • 入力画面のJSPでは、入力項目の個所で、リクエスト属性に error_email が存在するかをチェックし、存在した場合は、エラーメッセージを出すロジックを書く

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

  • Java

    15847questions

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