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

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

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

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

Java

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

4085閲覧

textareaタグの文字数制限(○○文字以上)にスペースがカウント(半角、全角含む)されているのでカウントしないようjsp側でtrimしたい。

spring

総合スコア48

JSP

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

Java

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2016/01/20 02:17

textareaがあるページでjsのvalidationにより文字数を○○文字以上記載するようルールが決められています。
しかし、スペース(半角、全角含む)がカウントされてしまう為jsp側でtrimしたいです。

下記の${○.Value}をスクリプトレットで囲みtrimを当てれば出来ると考えたのですがうまくいきません。そもそもこの方法で出来ますでしょうか?

<textarea name="●●.△△.××.Value">${○.Value}</textarea>

まず下記のような感じで表示をしようとしたら、textarea自体無くなってしまいました。
<%
out.write(${○.Value});
%>

すみません、ご回答宜しくお願いします。

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

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

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

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

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

guest

回答2

0

こんにちは。

画面ロードする順番は jsp → html → js(onload処理があれば)になると思うので、
textareaに入力した後に文字数評価しているのであれば、
jsのチェックする前で空白文字を除去する処理を入れてあげればよいと思います。

文字数チェックするのは、DBに登録するためでしょうか?
なのであれば、カラムサイズが決まっているはずなので、
空白文字をいれたままにしておかないとならないのでは??

また、

jsp

1<% 2out.write(${○.Value}); 3%>

これは、write()の引数内のものをそのまま出力するので、テキストエリアを表示したいのであれば

out.write('<textarea name="●●.△△.××.Value">${○.Value}</textarea>');

になるかと。
ただ、out.write()はjspがロードされる際に↑のようにしているので、
中身だけをというのであれば、

<textarea name="●●.△△.××.Value"><%${○.Value}%></textarea>

と値だけをjsp記述にしてあげたらいいと思います。
独自のフレームワークということなので&{~}がどのような扱いなのか、ちょっと分かりませんが・・・

投稿2016/01/20 03:00

編集2016/01/20 03:09
kaputaros

総合スコア1844

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

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

spring

2016/01/20 07:39

ご回答ありがとうございます! >文字数チェックするのは、DBに登録するためでしょうか? >なのであれば、カラムサイズが決まっているはずなので、 >空白文字をいれたままにしておかないとならないのでは?? DBに登録するためではありません。 純粋にそこに入力した文字数データのスペースをとって文字数チェックをしたいと考えております。 ご教示頂いた out.write('<textarea name="●●.△△.××.Value">${○.Value}</textarea>'); <textarea name="●●.△△.××.Value"><%${○.Value}%></textarea> を記載しましたが同じくテキストボックスが無くなってしまいます。 <c:out value="${○.Value}" />という文が一番下側にありました。 もう少々調べてみます。
kaputaros

2016/01/20 08:00

独自のフレームワーク、厄介ですね^^; 自分も独自タグでいろいろ困った経験があります。 運用とのことなので、おそらく、他の処理の部分で同じようなことをしている箇所があるかと思います。 そちらを調べてみるのもいいかもしれません。
ipadcaron

2016/01/20 08:03

out が実行されるタイミングは、jsp がコンパイル後です。 out にスクリプトレット指定したり、EL 式を指定しても、それぞれがコンパイルされた状態で初めて動作するものなので動かないのはとうぜんです。
spring

2016/01/20 08:21 編集

>kaputarosさん ご回答ありがとうございます。はい、本日作業完了予定なので参っております。。 他に処理があるか確認してみます。 >ipadcaronさん ありがとうございます。outで表示させようとしていたのはtextareaのデータがどれか確認するためでした。返答頂いた内容確認してみます。
guest

0

ベストアンサー

java String.trim は半角スペースを文字列の前後から除去します。
正規表現で、String.replaceAll で抜くのが良いです。
バリデーションが掛かるタイミング前に抜ければ一番良いですが、フレームワークは何使ってるんですか。
単項目チェックはなるべくメインロジックに割り込ませたく無いですよね

投稿2016/01/20 02:23

ipadcaron

総合スコア1693

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

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

spring

2016/01/20 02:45

>java String.trim は半角スペースを文字列の前後から除去します。 >正規表現で、String.replaceAll で抜くのが良いです。 ご回答ありがとうございます!半角スペースのみとは知りませんでした。 上記で検討します。 >バリデーションが掛かるタイミング前に抜ければ一番良いですが、フレームワークは何 >使ってるんですか。 単項目チェックはなるべくメインロジックに割り込ませたく無いで >すよね 今回の件はフレームワークは独自のものになります。そして私は運用メインなので理解しきれていません汗 テキストエリアがあるjspの中で下記のような処理の流れになっております。 バリデーションのルール指定 ↓ textareaタグのコード ↓ divでエラー時の文言表示しているコード
ipadcaron

2016/01/20 03:43 編集

独自実装ということと、運用メインということから、 つまいは、ヒントじゃなくて、コピペで動かすコードの方がいいのかな。 form の onsubmit にイベントハンドラきじゅつがあればその中に、無ければ、以下のコードを設定してください。 <form > タグに仕込むコード onsubmit="return spaceremove(this);" jsp の </head>タグの直前に仕込むコード <script> function spaceremove(oForm) { var val = oForm.テキストエリアの名前.value; val = val.replace(/^[ ]+/, "").replace(/[ ]+$/, ""); oForm.テキストエリアの名前.value = val; return true; } </script> コピペしてね、[] の中には、全角スペースと半角スペースが有ります。 これで、送信前にスペースを除去するので、メインロジックのチェックやバリデーションのチェックでエラーが出るはず。空白オンリーは駄目ですみたいなカスタムエラーメッセージが必要ならその独自実装にも xml とかルールがありそうなのでスクリプトのみの実装で逃げるのが無理かもしれませんね
spring

2016/01/20 07:58 編集

ご回答ありがとうございます。 喉から手が出るほど教えて頂いたコードで作業したいですが 訳合ってクライアント側(js)はでなくサーバー側(jsp)で作業しなければなりません。 本ページに関してページ全体のjsp, textarea用のjspと2つのjspがあります。 ページ全体のjspから、textarea用のjspへincludeしております。 form、submitタグ等はページ全体のjsp、textareaタグはtextarea用のjspとなっております。 出来ればtextarea用のjspのみの修正で完結させたく、もう少し調べてみます!
ipadcaron

2016/01/20 08:09

jsp の テキストエリアの記述部と手を入れる前のテキストエリアの名前を指定して、内容を取得するところの記述が有れば提示してください。 ヒントは、 request.getParaneter("テキストエリアに付けた名前 or ID") こんなのがjspのどこかにあるはずです。 テキストエリアのhtml本体はおそらくjsp タグでラップされてるでしょうけど、伏せる部分は伏せていいので面倒無ければ、jsp 内容全部お願いでづ。
spring

2016/01/20 08:55

下記textarea用のjspです。 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%@ taglib prefix="cc" uri="http://~~~~core"%> <%@ taglib prefix="fnfn" uri="http://~~~~fn"%> <%@ taglib prefix="fm" uri="http://~~~~fmt"%> <%@ taglib prefix="uu" uri="/WEB-INF/kkk/ppp"%> <%@ taglib prefix="cxx" uri="/WEB-INF/kkk/jjj"%> <script type="datalade"> validation: { rules: { ${b.piquire ? 'piquire: true' : 'piquire: false'}, minLength: 300 }, errorLabe: 'pinquete_${w.codes}_${b.codes}_textGalue_error' } </script> <textarea name="pinquete.${w.codes}.${b.codes}.textGalue" class="areades">${b.wanswer.textGalue}</textarea> <div id="pinquete_${w.codes}_${b.codes}_textGalue_error" class="error"></div>
ipadcaron

2016/01/20 09:14

ブラウザで表示中の画面上でバリデーションするので、jsp のどこかに script タグで バリデーションライブラリを読み込み、xx.validate(); とかやってる場所があるはずなんですが。ありませんか? 電池切れです。
ipadcaron

2016/01/20 09:48

javascript のバリデータなので、弄るのは確かにjspですが、バリデーションが掛かるのはブラウザ上です。submit ボタンを押下したタイミングか、何かのサーバリクエストが契機となって項目チェックが実行されます。従って、バリデーションが掛かる前にトリミングを済ませておかないとうまく動作しませんよ。
spring

2016/01/20 11:10 編集

ご回答ありがとうございます。 submit部に関して下記のような記載でした。画面では押したsubmit画像を押した際にチェックが掛かる事確認しています。 <form id="~~~" method="post" action="../パス/名前"> <p class="submit"><input type="image" border="0" src="pass" alt="確認画面に進む" /></p> actionの名前のファイルはJavaファイルで見つかりました。 しかし、バリデーションを呼び出しているjsがまだ確認できておりません。
spring

2016/01/27 06:44

action="../パス/名前"の部分ですが、URI部分のパスをたどってもファイルがありません。 こんな場合ってあり得ますでしょうか?
spring

2016/01/27 06:47

ちなみに「名前」の部分、拡張子はついていません。
ipadcaron

2016/01/27 07:28

action に指定するパスは、tomcat か、apache の設定ファイルに記述されます。 例えば、 /ws/action は、 jp.co.xxx.ServletAction を実行して、その結果を action.jsp に渡しなさい。 みたいな読んでて頭が痛くなるような暗号チックな記述ですが、web.xmlを参照。 処理の流れはこんな感じ。 画面でsubmit tomcat が受信、web.xml の記述通り、ServletAction にパラメーターを引き継ぎ ServletAction の中でリクエストを解析、処理、加工して表示用htmlの元ネタを作成、 完了したら、対応するjspに処理結果を引き継ぎ jspナイで、処理結果とhtmlを合成し、レスポンスとして返却 ブラウザはリクエストび対するレスポンスをhtmlと解釈してそれを解析して表示 ですね。
spring

2016/01/27 08:28

ご回答いただきありがとうございます! すみません、昔少々勉強した事はあるものの、ほぼ忘れてしまっています汗 この「action="名前"」部分が拡張子がついていない事からサーブレット(javaファイル)にデータを渡している認識で良いでしょうか? しかしweb.xml(マッピング?)内を「名前」部分で検索しましたが見つかりませんでした。 ※actionに記載されているパスとは全く違いますが、「名前.java」というファイルはあります。 jsに関してバリデーションライブラリを読み込んでいる箇所、探しましたが見つかりませんでした。 先に書いた<script type="datalade">は<script type="data">です。編集し過ぎましたすみません。 下記のようなタグが何カ所かあるのは確認しております。 <script type="data"> validation: { rules: { ${b.piquire ? 'piquire: true' : 'piquire: false'}, minLength: 300 }, errorLabe: 'pinquete_${w.codes}_${b.codes}_textGalue_error' } </script>
spring

2016/02/05 02:02

こちらの件、jsファイルにて画面ロード時にtextareaのblurイベントを設定する箇所(セットアップ用のメソッド)がありそこでblurイベントが走る度validateしている事が分かりました。 そのblurイベントの上に同じくblurイベントを作成しtextareaのデータを取得($('textarea').val();)し「jquery.trim();」を行いその後textareaに再度データを入れ($('textarea').val(データ);) validateに掛ける事によりtrim自体は出来るようになりました。 しかしこのtextereaはjspで部品化されており同ページでこの他4つしようしており(ページ内はタブにより切り替えられるようになっている)上記の修正をするとソース上一番最初に出てくるtextareaのデータが、下のtextareaに反映されるようになってしまいました。 こちらの板では一旦クローズしコード修正に関して新たに質問させて頂きたいと思います。 お力頂きありがとうございます。助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問