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

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

ただいまの
回答率

87.59%

「Spring」java テキストエリア入力値取得

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,913
退会済みユーザー

退会済みユーザー

現在Spring4系 java 10を使用してwebアプリを作成中です。 入力面での質問です。csvファイルから出力表示はできています。

そこで困っている点があります。(2画面構成でホーム画面と入力画面があります)
下記は期待する動作の参考画像になります。入力画面にて下記画像のように入力し、送信するとホーム画面(現在はローカルファイルに保存)に表示されるというものです。
イメージ説明
イメージ説明

JSPにて下記コードにてコード側からファイルに追加書き込みができるところまでは確認できました。
JSPに書き込まず別javaクラスでに記載して使用できればいいのですがうまくいきませんでした・・・。

    <%

    File file = new File("C:\\Users\\test.csv");


      FileWriter filewriter = new FileWriter(file, true);

      filewriter.write("確認");
      filewriter.write("追記確認");

      filewriter.close();
    %>


またこちらのURLにてテキストエリアに入力した値を取得できたとあり、試してみたのですがどうもアノテーション?の部分がエラーがでて理由がまだわからない状態です。 
検索してみた結果バージョンが古い等が見られましたが確認してみた結果そんなことはなかったです。
アノテーションのエラーになるのは下記です

@WebServlet("/FormServlet")
import javax.servlet.annotation.WebServlet;


何故でしょう・・・・ エラーにWebServletクラスを作れ!のようにでてきたので作ったりしてエラーは改善されましたが処理としては改善しませんでした。

今わたしの解決方法案としてはformを使用してデータの受け渡しをしようとしています。難航中です(あっているかはわかりませんが・・・)

form検討中のコード(果たしてform中にjavascriptを入れれるのか・・・・)
現在は送信ボタンを押下するとhome画面へ遷移する動きをしています。ここをテキストエリアに入れた値を取得してホームに表示させたいです。

  <form name="myform" onsubmit="return checkText()">
    <input type="text" value="送信" onclick="checkText()"/>
  <script>
    function checkText() {

        document.myform.action = "/home";

    }
</script>
</form>

アドバイス、参考URL等でも良いのでご教授ください。宜しくお願いします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • 退会済みユーザー

    退会済みユーザー

    2019/02/13 10:17

    実現したいことは入力画面でテキストエリアに値を入力して送信を押下すると値がCSVファイルに追加書き込みされるということです。
    これであってもいまの状態では実現は難しいでしょうか?
    頭が迷走しております・・・。

    キャンセル

  • wwbQzhMkhhgEmhU

    2019/02/13 10:32

    はい、正直に言って難しいと思います。まずは一旦やりたいことを諦めてください。
    そして、Springを使うなら、その入門的なチュートリアルをこなしてください。
    そうやって出来ることを少しずつ増やしていって、本当に実現できそうになってからトライしてみてはどうでしょう?まずはフォーム送信が出来るようになってからですね。
    フォーム送信からやるのではなくて、そこまでの地道な作業を全てやってからです。

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2019/02/13 10:40

    承知しました。入門的チュートリアルをネットで探してみます。
    ありがとうございました

    キャンセル

回答 1

checkベストアンサー

0

質問されている内容から察するに、Spring Frameworkは無関係で、サーブレットとJSPで実現できる内容です。

CSVファイルから読み込みの部分はできているとのことなので、あとはサーブレットで送信された内容を受けて、CSVに保存する処理を用意するだけです。

例えば送信側の画面(home.jsp)が、

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isELIgnored="false"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>CSVへ保存する画面</title>
</head>
<body>
<form action="FormServlet" method="POST">
    <input type="text" name="sampleText">
    <input type="submit" value="送信する">
</form>
</body>
</html>

だとした場合、このsampleTextを受け取るサーブレットは以下のようになるでしょう。

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class FormServlet
 */
@WebServlet("/FormServlet")
public class FormServlet extends HttpServlet {

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String sampleText = request.getParameter("sampleText");

        writeText(sampleText);

        request.getRequestDispatcher("home.jsp").forward(request, response);
    }

    private void writeText(String text) throws ServletException {
        File file = new File("C:\\Users\\test.csv");

        try (FileWriter filewriter = new FileWriter(file, true)) {
            filewriter.write(text);
            filewriter.close();
        } catch (IOException e) {
            throw new ServletException(e);
        }
    }
}

CSVから読み込む処理に合わせて、保存処理の内容を適宜変えていただけばよいかと思います。

CSVから読み込んだ結果をJSPに表示する処理はまた別途用意されているようなので、これを合わせても良いでしょう。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/02/15 16:37

    ありがとうございます。@WebServlet("/FormServlet") こちらのアノテーションがエラーで使用できないのですが思い当たる解決策はあるでしょうか?現在springレガシープロジェクトからspringMVCプロジェクトの順番でプロジェクトを作成しました。こちらではエラーで使用できない状態です。
    googleで検索した結果、動的webプロジェクトであればエラーがでず使用することができました。
    しかし現在は動的webプロジェクトに追加したいのではないのでエラーにて解決できません。
    @WebServlet("/FormServlet") こちらのアノテーションのエラー改善、もしくは他の手段はないでしょうか?
    springMVCレガシープロジェクトから動的webプロジェクトへプロパティから変更を試みましたが改善が見られませんでした。(正しく動的webプロジェクトに変更されている確信はありませんが・・)
    実行環境はSpring4.3系 java 10です。

    キャンセル

  • 2019/02/16 13:11

    動的Webプロジェクトを指定したときのサーブレットバージョンが3.0以降ならば @WebServlet は利用できます。SpringMVCを利用しているのでしたら、むしろ @WebServletをつけたサーブレットを作る理由はありません。

    キャンセル

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

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

関連した質問

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