【Java】ArrayListで組んだ配列をJSPで表示したい
Q&A
Closed
はじめに
今月より、Javaの勉強を始め、簡単なお問い合わせサイトを作成しています。
フォームに未入力項目があれば、「〇〇を入力してください。」と表示させる機能を実装中です。
こちらのサイトを参考に、配列を組んで未入力項目のみメッセージを表示させたいのですが、キャストエラーで詰まってしまいました。
どうようにすればエラーが解消し、表示させることができるのかご教授ください。
解決したいこと
- ClassCastExceptionの解消
- 配列をJSPで表示
発生している問題・エラー
該当するソースコード
Controller
ContactsServlet.java
package servlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model.Contact;
/**
* 問い合わせ画面・確認画面の表示を行うコントローラ
*/
@WebServlet("/ContactsServlet")
public class ContactsServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* 問い合わせ画面への遷移を行う
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setAttribute("error", "");
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/index.jsp");
dispatcher.forward(request, response);
}
/**
* 確認画面への遷移を行う
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Encode
request.setCharacterEncoding("UTF-8");
// Get_RequestParameter
String name = request.getParameter("name"); // 名前
String email = request.getParameter("email"); // メールアドレス
String tel = request.getParameter("tel"); // 電話番号
String sex = request.getParameter("sex"); // 性別
String item = request.getParameter("item"); // 項目
String content = request.getParameter("content"); // 内容
// Instance
Contact contact = new Contact();
// Set_Property
contact.setName(name);
contact.setEmail(email);
contact.setTel(tel);
contact.setSex(sex);
contact.setItem(item);
contact.setContent(content);
// Validation
List<String> error = new ArrayList<>();
if(name == "") {
error.add("名前を入力してください。");
}
if(email == "") {
error.add("メールアドレスを入力してください。");
}
if(tel == "") {
error.add("電話番号を入力してください。");
}
if(item == "" ) {
error.add("問い合わせ項目を選択してください。");
}
if(content == "") {
error.add("問い合わせ内容を入力してください。");
}
// Exchange[String] : avoid ClassCastException
// String[] StringError = error.toArray(String[]::new);
// Branch
if(error.size() > 0){
// Save_RequestScope
request.setAttribute("error", error);
// Forward -> index
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/index.jsp");
dispatcher.forward(request, response);
}else {
// Save_RequestScope
request.setAttribute("contact", contact);
// Forward -> confirm
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/confirm.jsp");
dispatcher.forward(request, response);
}
}
}
Model
Contact.java
package model;
import java.io.Serializable;
public class Contact implements Serializable{
protected String name, email, tel, sex, item, content;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setEmail(String email) {
this.email = email;
}
public String getEmail() {
return this.email;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getTel() {
return this.tel;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getSex() {
return this.sex;
}
public void setItem(String item) {
this.item = item;
}
public String getItem() {
return this.item;
}
public void setContent(String content) {
this.content = content;
}
public String getContent() {
return this.content;
}
}
View
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import ="java.util.ArrayList" %>
<%@ page import = "java.util.List" %>
<%
// Get_RequestScope
ArrayList<String> error = (ArrayList<String>) request.getAttribute("error");
%>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>問い合わせ画面</title>
<link rel="stylesheet" href="css/style.css">
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
<script src="js/index.js"></script>
</head>
<body>
<div>
<h1>株式会社○○</h1>
</div>
<div>
<h2>問い合わせ画面</h2>
</div>
<div>
<form action="#" class="contact-form">
<h1 class="contact-title">お問い合わせ 内容入力</h1>
<p>お問い合わせ内容をご入力の上、「確認画面へ」ボタンをクリックしてください。</p>
<!-- error message -->
<% for(int i=0; i<error.size(); i++){ %>
<%= error.get(i) %><br/>
<% } %>
<div class="expantion-box">
<button class="expantion" type="submit">問い合わせする</button>
</div>
</form>
<div class="form-contents">
<form action="#" method="post">
<div class="form-item">
<label>お名前</label>
<input type="text" name="name" placeholder="例)山田太郎" value="">
</div>
<div class="form-item">
<label>メールアドレス</label>
<input type="text" name="email" placeholder="例)guest@example.com" value="">
</div>
<div class="form-item">
<label>電話番号</label>
<input type="text" name="tel" placeholder="例)0000000000" value="">
</div>
<div class="form-item">
<label>性別</label>
<input type="radio" name="sex" value="男性" checked>男性
<input type="radio" name="sex" value="女性">女性
</div>
<div class="form-item">
<label>問い合わせ項目</label>
<select name="item">
<option disabled selected>お問い合わせ項目を選択してください</option>
<option value="ご質問・お問い合わせ">ご質問・お問い合わせ</option>
<option value="ご意見・ご感想">ご意見・ご感想</option>
</select>
</div>
<div class="form-item">
<label>問い合わせ内容</label>
<textarea name="content" rows="5" placeholder="お問合せ内容を入力" value=""></textarea>
</div>
<button class="confirm" type="submit">確認画面へ</button>
</form>
</div>
</div>
</body>
</html>
confirm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="model.Contact" %>
<%
// Get_RequestScope
Contact contact = (Contact) request.getAttribute("contact");
%>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>確認画面</title>
<link rel="stylesheet" href="css/style.css">
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
</head>
<body>
<div>
<h1>株式会社○○</h1>
</div>
<div>
<h2>確認画面</h2>
</div>
<div>
<form action="#" method="post">
<h1 class="contact-title">お問い合わせ 内容確認</h1>
<p>お問い合わせ内容はこちらで宜しいでしょうか?<br>よろしければ「送信する」ボタンを押して下さい。</p>
<div>
<div>
<label>お名前</label>
<p><%= contact.getName() %></p>
</div>
<div>
<label>メールアドレス</label>
<p><%= contact.getEmail() %></p>
</div>
<div>
<label>電話番号</label>
<p><%= contact.getTel() %></p>
</div>
<div>
<label>性別</label>
<p><%= contact.getSex() %></p>
</div>
<div>
<label>お問い合わせ項目</label>
<p><%= contact.getItem() %></p>
</div>
<div class="detail">
<label>お問い合わせ内容</label>
<p class="content-length"><%= contact.getContent() %></p>
</div>
</div>
<input type="button" value="内容を修正する" onclick="history.back()">
<button type="submit" name="submit">送信する</button>
</form>
</div>
</body>
</html>
自分で試したこと
下記、参考のサイトを基に配列の型をStringに変換し、互換性を持たせてみました。
変換のために記述したコードは、Controllerでコメントアウトした1行ですが、エラーは変わらずでした。
参考
Listとゆかいなクラスたち
「ArrayList で変数を宣言してはいけません!」からはじまる疎結合の解説
java キャストが上手くいきません。
ArrayList から配列に変換できない
Javaで配列の内容を文字列にして表示する
0