<目次>
(1) JSP/Servletでポップアップを表示する方法について
(1-1) 実現したい事
(1-2) 構文
(1-3) サンプルプログラム
(1) JSP/Servletでポップアップを表示する方法について
(1-1) 実現したい事
例えば、次の図のようなJSP画面(初期表示)⇒Sevlet(入力チェック処理)⇒JSP画面(エラー表示)という画面遷移があった際に、遷移後のJSP画面でポップアップ(エラー表示)を出力しています。
(1-2) 構文
request.setAttribute("error_msg", "「氏名」は空欄にできません。");
RequestDispatcher rd = getServletContext().getRequestDispatcher(“遷移先画面名.jsp”); rd.forward(request, response);
<% if(request.getAttribute("error_msg")!=null){ String error_msg = (String)request.getAttribute("error_msg"); %>
最後にJSP側でJavaScriptを組み込み、エラーメッセージをポップアップ(alert)に乗せて出力しています。「<%=error_msg%>」でメッセージの内容を取得しています。
<script type="text/javascript"> var msg = "<%=error_msg%>"; alert(msg); </script>
(1-3) サンプルプログラム
●JSP①
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>ITxxxx_エラー時ポップアップ出力</title> </head> <form method="POST" action="ITxxxx_ShowPopUpServlet" name="validataion"> 名前を入力して「送信」を押して下さい。<br /><br /> <body> ①氏名: <input type="text" name="g_name" id="name" /> <br /> <input type="submit" value="送信" /></td> </body> <% if(request.getAttribute("error_msg")!=null){ String error_msg = (String)request.getAttribute("error_msg"); %> <script type="text/javascript"> var msg = "<%=error_msg%>"; alert(msg); </script> <%}%> </form> </html>
●Servlet
package studyc; import java.io.IOException; import java.util.ArrayList; 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 javax.servlet.RequestDispatcher; @WebServlet("/ITxxxx_ShowPopUpServlet") public class ITxxxx_ShowPopUpServlet extends HttpServlet { private static final long serialVersionUID = 1L; public ITxxxx_ShowPopUpServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //# GET時の必須入力チェックの実行 MandatoryCheck(request,response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } //# エラーメッセージを格納するためのArrayList public ArrayList<String> errs = new ArrayList<String>(); //# エラーメッセージを格納したArrayList「errs」のメッセージをHTML形式に整形(タグを付与)したり、文字色を赤くする処理をしています。 //# StringBuffer型の変数に格納していき、その結果を戻り値にしています。 public String getErrorList() { StringBuffer buf = new StringBuffer(); if(errs.size()>0) { for(int i=0; i<errs.size(); i++) { buf.append("・"+errs.get(i)); } } return buf.toString(); } //# 必須入力チェックを行うメソッドです。 public void requiredCheck(String value, String name) { //もし「引数(value)がnull」OR「引数(value)の空白削除値が空」なら if(value==null || value.trim().isEmpty()) { //入力値がブランクであると見なし、入力を求めるメッセージを出力 errs.add(name+" は必須項目です。値を入力してください。"); } } //# 必須入力チェックの全体処理 //# 入力値の取得→必須チェック→エラーメッセージのセット→画面遷移までの一連の処理を行うメソッド public void MandatoryCheck(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { errs = new ArrayList<String>(); String v_name = request.getParameter("g_name"); //# もし必須入力のいずれかが「null」OR「ブランク」の場合 if(v_name==null || v_name=="") { //# 必須入力項目のチェックを実行 //# (requiredCheckを実行して空なら「[項目名] is a mandatory~」のエラーメッセージがArrayListに格納される) requiredCheck(request.getParameter("g_name"),"[①氏名]"); //# エラーメッセージをリクエストの属性としてセット request.setAttribute("error_msg", getErrorList()); //# エラーメッセージを表示するため、再び項目の入力画面に戻る String nextpage="/ITxxxx_ShowPopUpMsg.jsp"; RequestDispatcher rd = getServletContext().getRequestDispatcher(nextpage); rd.forward(request, response); } //# 必須入力項目がnullかブランクでない場合、各項目の値をリクエストの属性(末尾に2を付けた項目名)としてセットしていく else { //# バリデーションの結果問題なければ、次画面に遷移する String nextpage="/ITxxxx_ShowPopUpMsgResult.jsp"; RequestDispatcher rd = getServletContext().getRequestDispatcher(nextpage); rd.forward(request, response); } } }
●JSP②(※今回は使用せず)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>ITxxxx_エラー時ポップアップ出力</title> </head> <body> <br /> 必須チェック成功です。 <br /> こんにちは "<%=request.getParameter("g_name")%>"" さん! <br /> <a href="ITxxxx_ShowPopUpMsg.jsp">→前ページに戻る</a> </body> </html>
(図133)