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

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

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

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

Java

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

JavaScript

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

Q&A

解決済

4回答

3769閲覧

.innerHTMLは<input type="text" は使えても <html:text は使えない?

saitama1232

総合スコア27

JSP

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

Java

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

JavaScript

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

2グッド

0クリップ

投稿2016/03/31 00:54

お世話になります。
先日、
https://teratail.com/questions/30625
の質問をさせていただいた者です。
若干関連があるのですが、
javascriptの .innerHTML に関して不明点がありますので教えてください。

メインの開発言語はjava/SAStrutsです。

現在、以下のjavascriptは動くことを確認しております。

lang

1function insertRow(table_id) { 2 // テーブル取得 3 var table = document.getElementById(table_id); 4 // 行を行末に追加 5 var row = table.insertRow(-1); 6 // セルの挿入 7 var cell= row.insertCell(-1); 8 9 // セルの内容入力 10 giftKindCell.innerHTML = '<input type="text" name="text"/>'; 11}

ですが、これだとjava側でのvalidateで引っかかった時にテキストエリアを赤く表示する「errorStyleClass」属性が使えない状態なので、以下のように書き換えたいと思っております。

lang

1function insertRow(table_id) { 2 // テーブル取得 3 var table = document.getElementById(table_id); 4 // 行を行末に追加 5 var row = table.insertRow(-1); 6 // セルの挿入 7 var cell= row.insertCell(-1); 8 9 // セルの内容入力 10 giftKindCell.innerHTML = '<html:text property="text" errorStyleClass="error"/>'; 11}

「<input type="text"」を、「<html:text」に変えたことで、
行追加をしたときにテキストボックスが現れなくなります。

なぜhtml:textが使えないかわからないので、お分かりの方いましたら解決策を教えてください。

mhashi, ikuwow👍を押しています

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

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

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

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

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

kei344

2016/03/31 03:36

解決したのであれば、「解決済」にされてはいかがでしょうか。
guest

回答4

0

servletやjspはサーバサイドで実行されます。
javascriptはサーバサイドで生成されたhtmlに対してクライアントサイドで実行されます。
なので、javascriptの処理で出力したjspの記述に対し、サーバ側の処理は実行されないのです。
「<html:text」は標準のhtml表現ではありません。jspで記述した際にサーブレットコンテナが標準htmlに変換してくれる、「jsp用の表記」です。
「jsp用の表記」にブラウザは対応してないから表示されないのです。

投稿2016/03/31 01:01

tkturbo

総合スコア5572

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

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

saitama1232

2016/03/31 01:10

jspタグをhtmlとして使おうとしていたんですね。 サーバー側クライアント側の認識が甘かったです。ありがとうございました。
guest

0

ベストアンサー

的外れかもしれませんが、何かのタイミングでjsを実行してテキストエリアを追加しているので、errorStyleがかけられないということがお困りのポイントだと思います。(間違ってたらすみません。)
これを解消するにはあらかじめ追加予定の部分をjspに記載しておき、styleでdisplay="none"などで隠しておき、現在カラム追加をしているタイミングで追加ではなく、display="none"を解除してあげてはいかがでしょうか?

投稿2016/03/31 01:45

T.Yokotani

総合スコア141

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

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

saitama1232

2016/03/31 01:52

いえ、困っているポイントはまさにその通りでございます。 「追加」という概念ではなく「隠れていたものを表示させる」という感じになるんですかね。 ありがとうございます!試してみます!
guest

0

javascriptではなく、body に
<html:text property="text" errorStyleClass="error"/>
と書いた部分を、
画面が表示されてから「ソースを表示」などで見てみると
普通の <input type="text" /> か何かになっていると思います。

<html:text /> は <html:text /> として動くのではなくて、
画面表示時に普通の HTML 要素に変換されるのです。

これは JSP が変換してくれています。
javascript はこの変換が終わった後に走るので、こういう書き方はできません。

投稿2016/03/31 01:11

sk_3122

総合スコア1126

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

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

sk_3122

2016/03/31 01:14

「エラーであるかどうか」の判定って、insertRow() のタイミングでできましたっけ? もしできるなら、unau さんの提案のように、class="error" を付与するかどうか振り分ければ良いかなと思いますが。
sk_3122

2016/03/31 01:16

あ、validate か。無理か?どうだっけ。ごめんなさい、ちょっと忘れてください。
guest

0

よくわかっていませんが、```<html:text ... >というのは JSP か何かのタグですよね。だとしたら、JSP のコンパイラを通してサーブレットに変換され、そのサーブレットが実行されない限りは html として意味のあるタグにはなりません。JSP の解釈はサーバ側の話ですよね。 JavaScript の実行はブラウザ側(クライアント側)の話です。ここの.innterHTML` で記述するのは「生」の HTML 要素になります。ので、生の HTML (部品)として正しい文字列を書く必要があります。
このケースでは

giftKindCell.innerHTML = '<input type="text" name="text" class="error"/>';

とか。もし、サーバサイドで何か判断して属性を差し替えたりしなければならないとしたら、そちらのコードもないとアドバイスしようがありません。

投稿2016/03/31 01:06

編集2016/03/31 01:07
unau

総合スコア2468

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問