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

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

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

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

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

解決済

SpringBootで初期画面が出ない

onoko
onoko

総合スコア39

Java

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

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

1回答

0リアクション

0クリップ

214閲覧

投稿2022/09/05 07:07

前提

SpringBoot 初心者です。
消費税計算のプログラムを作っています。事業区分ごとの税込売上高を入力し、「計算」のボタンをクリックすると、税額算出画面に計算式と納付税額が表示される仕組みです。
ところが、Thymeleafを使ったhtmlのトップ画面を出そうとしているのですけれど、これが出ません。
次のようなエラーメッセージが出るのですが、その指摘する箇所を検討してみても正しいように見えて原因が分かりません。
どこに根本的な誤りがあるのかをできましたらご教授願いたいのですが。

実現したいこと

トップ画面を表示する機能を動作するようにする。

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

トップ画面が出ない。

Caused by: org.attoparser.ParseException: Error during execution of processor 'org.thymeleaf.spring5.processor.SpringInputGeneralFieldTagProcessor' (template: "taxCalc/top" - line 25, col 59)

該当のソースコード

java

package com.example.demo.web; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping("taxCalc") public class taxCalcController { @ModelAttribute SalesForm setupForm() { return new SalesForm(); } @GetMapping String top() { return "taxCalc/top"; } @PostMapping(params="taxCalc") String result() { return "taxCalc/result"; } @GetMapping(params="goToTop") String goToTop() { return "taxCalc/top"; } }

java

package com.example.demo.web; import javax.validation.constraints.PositiveOrZero; public class SalesForm { @PositiveOrZero private Integer sales1_8; @PositiveOrZero private Integer salesRET1_8; @PositiveOrZero private Integer sales1_10; @PositiveOrZero private Integer salesRET1_10; @PositiveOrZero private Integer sales2_8; @PositiveOrZero private Integer salesRET2_8; @PositiveOrZero private Integer sales2_10; @PositiveOrZero private Integer salesRET2_10; @PositiveOrZero private Integer sales3_8; @PositiveOrZero private Integer salesRET3_8; @PositiveOrZero private Integer sales3_10; @PositiveOrZero private Integer salesRET3_10; @PositiveOrZero private Integer sales4_8; @PositiveOrZero private Integer salesRET4_8; @PositiveOrZero private Integer sales4_10; @PositiveOrZero private Integer salesRET4_10; @PositiveOrZero private Integer sales5_10; @PositiveOrZero private Integer salesRET5_10; @PositiveOrZero private Integer sales6_10; @PositiveOrZero private Integer salesRET6_10; }

html

<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>消費税計算</title> </head> <body> <h1>消費税計算画面(簡易課税制度による)</h1> <form th:action="@{/taxCalc/result}" th:object="${salesForm}" method="post"> <div id="userForm-errors" th:errors="*{*}" class="error-message-list"></div> <table border="1"> <tr> <th>事業区分</th> <th>業種</th> <th>みなし仕入率</th> <th>8%売上(税込)</th> <th>8%売上返還(税込)</th> <th>10%売上(税込)</th> <th>10%売上返還(税込)</th> </tr> <tr> <th>第一種事業</th> <th>卸売業</th> <th>90%</th> <td><input type="text" id="sales1_8" name="sales1_8" th:field="*{sales1_8}" value=0 th:errorclass="error-input"/></td> <td><input type="text" id="salesRET1_8" name="salesRET1_8" th:field="*{salesRET1_8}" value=0 th:errorclass="error-input"/></td> <td><input type="text" id="sales1_10" name="sales1_10" th:field="*{sales1_10}" value=0 th:errorclass="error-input"/></td> <td><input type="text" id="salesRET1_10" name="salesRET1_10" th:field="*{salesRET1_10}" value=0 th:errorclass="error-input"/></td> </tr> <tr> <th>第二種事業</th> <th></th> <th>80%</th> <td><input type="text" id="sales2_8" name="sales2_8" th:field="*{sales2_8}" value=0 th:errorclass="error-input"/></td> <td><input type="text" id="salesRET2_8" name="salesRET2_8" th:field="*{salesRET2_8}" value=0 th:errorclass="error-input"/></td> <td><input type="text" id="sales2_10" name="sales2_10" th:field="*{sales2_10}" value=0 th:errorclass="error-input"/></td> <td><input type="text" id="salesRET2_10" name="salesRET2_10" th:field="*{salesRET2_10}" value=0 th:errorclass="error-input"/></td> </tr> <tr> <th>第三種事業</th> <th></th> <th>70%</th> <td><input type="text" id="sales3_8" name="sales3_8" th:field="*{sales3_8}" value=0 th:errorclass="error-input"/></td> <td><input type="text" id="salesRET3_8" name="salesRET3_8" th:field="*{salesRET3_8}" value=0 th:errorclass="error-input"/></td> <td><input type="text" id="sales3_10" name="sales3_10" th:field="*{sales3_10}" value=0 th:errorclass="error-input"/></td> <td><input type="text" id="salesRET3_10" name="salesRET3_10" th:field="*{salesRET3_10}" value=0 th:errorclass="error-input"/></td> </tr> <tr> <th>第四種事業</th> <th></th> <th>60%</th> <td><input type="text" id="sales4_8" name="sales4_8" th:field="*{sales4_8}" value=0 th:errorclass="error-input"/></td> <td><input type="text" id="salesRET4_8" name="salesRET4_8" th:field="*{salesRET4_8}" value=0 th:errorclass="error-input"/></td> <td><input type="text" id="sales4_10" name="sales4_10" th:field="*{sales4_10}" value=0 th:errorclass="error-input"/></td> <td><input type="text" id="salesRET4_10" name="salesRET4_10" th:field="*{salesRET4_10}" value=0 th:errorclass="error-input"/></td> </tr> <tr> <th>第五種事業</th> <th></th> <th>50%</th> <td></td> <td></td> <td><input type="text" id="sales5_10" name="sales5_10" th:field="*{sales5_10}" value=0 th:errorclass="error-input"/></td> <td><input type="text" id="salesRET5_10" name="salesRET5_10" th:field="*{salesRET5_10}" value=0 th:errorclass="error-input"/></td> </tr> <tr> <th>第六種事業</th> <th>不動産業</th> <th>40%</th> <td></td> <td></td> <td><input type="text" id="sales6_10" name="sales6_10" th:field="*{sales6_10}" value=0 th:errorclass="error-input"/></td> <td><input type="text" id="salesRET6_10" name="salesRET6_10" th:field="*{salesRET6_10}" value=0 th:errorclass="error-input"/></td> </tr> </table> <input type="submit"name="taxCalc" value="計算"/> </form> </body> </html>

試したこと

エラーの起きている箇所をコメントアウトしたのちただの<td></td>に置き換えて再実行しても、次の行にエラーが移るだけ。

エラーを指摘された箇所(nameの名前”sales1_8"のs)を含め名前に使用する文字に不適当はない。

補足情報(FW/ツールのバージョンなど)

以下のような質問にはリアクションをつけましょう

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

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

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

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

適切な質問に修正を依頼しましょう。

m.ts10806

2022/09/05 07:26

value=0 上記のように属性値がクォーテーションで閉じられていないところを閉じた場合はどうなりますか?
onoko

2022/09/05 08:08

実行してみたところエラーで、同じエラーメッセージがでました。
m.ts10806

2022/09/05 08:12

なるほど。あくまでテンプレートの文法上のエラーなのは間違いないので、 taxCalc/top" (提示されたhtmlでしょうか?)の 25行目, 59列目付近で気になるところを出してみました。
onoko

2022/09/05 08:22 編集

仔細にいたるご指摘ありがとうございます。また私が提示したhtmlの名前は top.html で、注釈不足でした。
m.ts10806

2022/09/05 08:32

あまり関係なさそうですが、小さい可能性でも潰したいので以下も確認してみてください。 inputタグってそもそも閉じタグがないので / って後ろに書く必要がないです。 HTML的に問題はないですが、精密チェックだと警告くらいは出るかもしれません。
onoko

2022/09/05 08:46

SpringBootの教本のサンプルの<input>が、/>で閉じてあったため写しました。その前はお勧め通りの、>で閉じていたのですが、その際にも同一のエラーが出ていました。なにはともあれ、/を取ってみます。
m.ts10806

2022/09/05 08:48

いえ、おそらく関係ないと思いつつ、どこかで引っ掛かってる可能性を模索してる感じです。 ※手元で環境が組めてないのでそこは申し訳ない
m.ts10806

2022/09/05 08:50

そういえば、そもそも salesForm というオブジェクトがVIEWに渡るように書けていないように思うのですが、如何でしょうか。
onoko

2022/09/05 08:54

/をとってやってみました。同じエラーが出ました。
onoko

2022/09/05 10:14

画面の第一番目の項目からエラーが出るということは、そもそも画面にオブジェクトが渡っていないことを意味していて、おっしゃる通りだからだと存じます。そこで使い慣れない@ModelAttributeをやめて、1メソッドずつ、model.addAttribute("salesForm",salesForm)を、またGetMappingtとPostMappingの修飾するメソッドの引数に(@Validated SalesForm salesForm,Model model)をコードして、画面にデータを移転しようと実行しましたが、表示されず、同じエラーメッセージがまた出ました。思うにSalesFormをnewするタイミングが不明なためもあるかと存じます。どうかこの状態を解消するためのご指導をよろしくお願いいたします。
m.ts10806

2022/09/05 10:42

念のため書き直したコードを提示してもらっても良いですか? 現状だとどのパターンでもSalesFormは渡っても各項目は全部nullになってる気がするので。
onoko

2022/09/05 11:08

画面出ました。原因は、SalesFormクラスに、getterとsetterの機能を自明のものとする、SpringBootの機能の処理上必要とされるらしい、lombok をimpotしていなかったからで、ログの末尾あたりにそういうことが出ているのに気が付いて、解明につながったのでした。問題は解決しました。丁寧でご親切なお付き合い誠にありがとうございました。
m.ts10806

2022/09/05 11:11

あぁなるほど。 ひとまず顛末を自身で回答として記載して自己解決としてください。 その出てたログの部分を回答に貼っておくと後から見る人にも参考になると思いますので。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

Java

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

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。