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

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

ただいまの
回答率

88.22%

入力フォームチェック後の投稿処理動作

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 973

gamebox

score 13

実現したいこと

参考書を見ながら、簡易掲示板を作成しています。
機能としては、投稿・削除・閲覧という単純なものです。
投稿する際、入力チェックを行い、チェックに引っかかったものは画面にエラーメッセージを
表示し、投稿処理をさせません。
投稿処理を止める方法がわからなくて困っています。
下記ソースコードにどのようなロジックを書いたら良いでしょうか?

また、下記の意味についても教えて頂けると幸いです。
1つ目に関しては、メッセージを追加するという意味でしょうか?
2つ目はどういう処理を行っているのでしょうか?
   1.bbsManager.AddItem(item);   
   2.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);   
  }

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • A-pZ

    2016/06/03 03:10

    bbsManagerクラスのコードがあると、解答が得られると思います。

    キャンセル

  • gamebox

    2016/06/03 07:36

    下記に、bbsManagerクラスのコードを記載します。
    回答よろしくお願いします。

    ##ソースコード(bbsmanagerbenas)
    import java.lang.*;
    import java.math.*;
    import java.util.*;
    import java.io.*;

    public class BBSManagerBeans {

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

    final private String dataFilename = "bbs.dat";
    protected String dataPath;
    protected List bbsItemsNoSync;
    protected List bbsItems;
    protected String logFilename;

    ///////////////////// コンストラクタ ///////////////////

    public BBSManagerBeans()
    {
    dataPath = "";
    ReadDataFile();
    }

    ///////////////////// コンストラクタ ///////////////////

    public BBSManagerBeans(String path)
    {
    if (path != null)
    dataPath = path;
    else
    dataPath = "";
    ReadDataFile();
    }

    ///////////////////// メッセージを取得 ///////////////////

    protected BBSItem GetItem(int index)
    {
    BBSItem item;
    try {
    item = (BBSItem)bbsItems.get(index);
    }
    catch(IndexOutOfBoundsException e) {
    item = null;
    }
    return item;
    }

    ///////////////////// メッセージを追加 ///////////////////

    public void AddItem(BBSItem item)
    {
    bbsItems.add(0,item);
    WriteDataFile();
    }

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

    public void DeleteItem(int index, String deleteKey)
    {
    BBSItem item;
    try {
    item = (BBSItem)bbsItems.get(index);
    }
    catch(IndexOutOfBoundsException e) {
    return;
    }

    if (item == null) {
    return;
    }

    if (deleteKey.compareTo(item.deleteKey) != 0) {
    return;
    }

    bbsItems.set(index, null);
    WriteDataFile();
    }

    ///////////////////// メッセージ数を取得 ///////////////////

    public int GetMaxItems()
    {
    return bbsItems.size();
    }

    ///////////////////// BBSDataBeansへメッセージを詰め込む ///////////////////

    public void ReadArticles(int index, BBSDataBeans bbsData)
    {
    int maxitems = GetMaxItems();
    int items = 0;
    for(int i = 0; items < BBSDataBeans.maxItemsPerPage && index + i < maxitems; i ++) {
    BBSItem item = GetItem(index + i);
    if (item == null)
    continue;
    item.index = index + i;
    bbsData.setItem(items, item);
    items ++;
    bbsData.numOfItems ++;
    bbsData.lastIndex = index + i;
    if (items == BBSDataBeans.maxItemsPerPage)
    break;
    }
    }

    ///////////////////// ファイルからメッセージを読み込む ///////////////////

    public synchronized boolean ReadDataFile() {
    try {
    FileInputStream istream = new FileInputStream(dataPath+"/"+dataFilename);
    ObjectInputStream p = new ObjectInputStream(istream);
    bbsItemsNoSync = (ArrayList)p.readObject();
    bbsItems = Collections.synchronizedList(bbsItemsNoSync);
    istream.close();
    }
    catch(IOException e) {
    bbsItemsNoSync = new ArrayList();
    bbsItems = Collections.synchronizedList(bbsItemsNoSync);
    return false;
    }
    catch(ClassNotFoundException ce) {
    bbsItemsNoSync = new ArrayList();
    bbsItems = Collections.synchronizedList(bbsItemsNoSync);
    return false;
    }
    catch(Exception e) {
    System.out.println("Exception:"+e.getMessage());
    }
    return true;
    }

    ///////////////////// ファイルへメッセージを書き込む ///////////////////

    public synchronized boolean WriteDataFile() {
    try {
    FileOutputStream ostream = new FileOutputStream(dataPath+"/"+dataFilename);
    ObjectOutputStream p = new ObjectOutputStream(ostream);
    p.writeObject(bbsItemsNoSync);
    p.flush();
    ostream.close();
    } catch(IOException e) {
    return false;
    }
    return true;
    }
    }

    ##ソースコード(bbsdatabenas)

    import java.lang.*;
    import java.math.*;
    import java.util.*;
    import java.io.*;

    public class BBSDataBeans {

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

    static final int maxItemsPerPage = 5;
    BBSItem[] bbsItems;
    int numOfItems;
    int lastIndex;

    ///////////////////// コンストラクタ ///////////////////

    public BBSDataBeans() {
    bbsItems = new BBSItem[20];
    for(int i = 0; i < maxItemsPerPage; i ++) {
    bbsItems[i] = new BBSItem();
    }

    if (bbsItems[0] == null) {
    return;
    }

    numOfItems = 0;
    lastIndex = 0;
    }

    ///////////////////// メッセージの追加 ///////////////////

    public void setItem(int index, BBSItem item) {
    if (index >= maxItemsPerPage) {
    return;
    }
    if (item == null) {
    return;
    }

    if (bbsItems[index] == null) {
    return;
    }
    bbsItems[index].name = item.name;
    bbsItems[index].email = item.email;
    bbsItems[index].content = item.content;
    bbsItems[index].subject = item.subject;
    bbsItems[index].deleteKey = item.deleteKey;
    }

    ///////////////////// アクセスメソッド ///////////////////

    // メッセージ数

    public int getNumOfItems() {
    return numOfItems;
    }

    // 投稿者名

    public String getName(int index) {
    return bbsItems[index].name;
    }

    // メールアドレス

    public String getEmail(int index) {
    return bbsItems[index].email;
    }

    // サブジェクト

    public String getSubject(int index) {
    return bbsItems[index].subject;
    }

    // 内容

    public String getContent(int index) {
    return bbsItems[index].content;
    }

    // メッセージ番号

    public int getIndex(int index) {
    return bbsItems[index].index;
    }

    // 次のページの最初のメッセージ番号

    public int getLastIndex() {
    return lastIndex;
    }
    }

    キャンセル

  • takyafumin

    2016/06/03 08:10

    ソースコードは質問に追記したほうが読みやすいですね。またコードタグを使って記載すると他の方も読みやすく、回答が得られやすいと思いますよ。

    キャンセル

回答 1

checkベストアンサー

0

>1つ目に関しては、メッセージを追加するという意味でしょうか? 
>   1.bbsManager.AddItem(item);    
itemにリクエストから取得したnameなどを入れてますよね。
それを詰め込んでますね。
そのあとWriteDataFile()を呼んでメッセージをファイルに出しているみたいです。

>2つ目はどういう処理を行っているのでしょうか? 
>   2.bbsManager.ReadArticles(0, bbsData);    
そのメソッドの説明のままですね。
///////////////////// BBSDataBeansへメッセージを詰め込む ///////////////////
って書いてます。
上のコーディングだと、bbsDataにAddItemで追加した内容をbbsDataの0番目に追加してますね。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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