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

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

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

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

2回答

10270閲覧

Servletから渡されたListを使ってJavascriptでクライアントバリデートする方法

phtm123

総合スコア7

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2017/06/05 07:33

お世話になっております。

現在JavaにてWEBアプリ開発(CMS)を行っており、以下の機能を実現したいところなのですがなかなか方法がなく詰まってしまっています。

【前提】

  • とある入力フォームにて(DB制約上のPKとしてエラーを起こさないために)重複しないようにしたい。この項目を「ID」とします。
  • 入力してsubmit後のサーバー側でバリデートするのは仕様上都合が悪いので、あらかじめその時点でDB登録されている「ID」リストを取得しておいて、JSP表示。submitボタンが押されたときのonclickイベントで取得しておいた「IDリスト」とフォーム入力された「ID」を突き合わせて重複がないかJavascriptでチェックするようにしたい。

【質問】
Java(Servlet)からJSPに登録済みIDリストを渡し、そのリスト(配列)をJavascriptで扱いたいと思っているのですが、
Javascriptのメソッドの引数にServletから渡ってきたリストを格納することができていません。

Javascript

1function validate_id(id, registedIdList){// idはフォーム入力されたID,registedIdListはServletから渡ってきたIDリスト 2 for(i=0 ; i<registedIdList.length ; i++){ 3 if(registedIdList[i] == id){ 4 alert('重複'); 5 return false; 6 } 7 } 8 // 問題なければsubmit 9}

みたいなイメージをしているのですが、上記サンプルコードでいうregistedIdListはServletからどのようにして引き継げばよいのでしょうか。
普通にやろうとすると、セッションから取得する際に
「[LString[]:をArrayWrapperが拾えませんでした」的なエラーが出ます。

そもそものアプローチでこうした方がいいというのもありましたらご指摘ください。
すみませんが、ご回答のほどよろしくお願いいたします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

まず最初にそもそもサーバ側で

バリデートしないっていうのはありえない

です。

クライアントのチェックは、サーバとの通信を減らすためで、クライアントチェックが
通ればサーバ側ノーガードは、かなりヤバイので仕様の再検討をしないと後々問題になるかと

と、前提をおきつつ・・・

基本的にサーバサイドの情報をクライアントサイドと直接共有することはできません。

なので、JSP出力時に直接データ「IDリスト」として出力するか、AjaxでIDリストだけ個別
に受け取るしかありません。

javascript

1function validate_id(id){ 2 var registedIdList = ['ID1', 'ID2']; // IDリストをサーバ側で固定値を出力する 3 for(i=0 ; i<registedIdList.length ; i++){ 4 if(registedIdList[i] == id){ 5 alert('重複'); 6 return false; 7 } 8 } 9 // 問題なければsubmit 10} 11

かなり古いフレームワークですが、JavaのDWRが一番やりたいことに近いとは思います。

投稿2017/06/05 08:42

momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

一番簡単な方法としては、サーブレットにてあらかじめJavaScriptでも参照できるようJSON形式へ変換し、それからリクエスト属性に格納しておけば、JavaScriptを含んだJSPで表示できます。次のサーブレットではわかりやすいよう、1つの値を直接List<String>へ格納していますが、シングルクォートで囲んでいます。

java

1@WebServlet("/SimpleServlet") 2public class SimpleServlet extends HttpServlet { 3 protected void doGet(HttpServletRequest request, HttpServletResponse response) 4 throws ServletException, IOException { 5 List<String> ids = Arrays.asList("'id01'", "'id02'", "'id03'"); 6 7 request.setAttribute("ids", ids); 8 9 request.getRequestDispatcher("/sample.jsp").forward(request, response); 10 } 11}

JSPは次のようになるでしょう。

html

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8" isELIgnored="false" %> 3<html> 4<head> 5<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 6<title>Insert title here</title> 7<script> 8var idList = ${ids}; 9(window.onload = function() { 10 for (i=0;i<idList.length;i++) { 11 console.debug(idList[i]); 12 } 13})(); 14 15</script> 16</head> 17<body> 18 19</body> 20</html>

JSON変換をするのに一番簡単なものとして、JSonicを導入すると良いでしょうか。

投稿2017/06/14 01:30

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問