- PR -

ボタンの活性非活性について(JSP)

投稿者投稿内容
すひろ
大ベテラン
会議室デビュー日: 2006/10/17
投稿数: 124
お住まい・勤務地: 愛知県
投稿日時: 2006-11-17 23:55
いつもお世話になっております。
Struts1.2.9を使ったJSPに関する質問です。

セッションに登録してあるString型変数codeが"参照"の時のみ、
テキストエリアとsubmitボタンのすべてを非活性にするという処理を作ったのですが、
下記ソースよりも簡潔にコーディングすることはできないでしょうか。
現状ではproperty値やHTMLを修正するときに二度手間になってしまい、悩んでいます。
何かいい方法をご存知の方がいましたら、よろしくお願いいたします。

<logic:equal name="USER" property="code" value="参照">
   名前:<html:text property="namae" disabled="true" /><br>
   電話:<html:text property="denwa" disabled="true" /><br>
   メール:<html:text property="email" disabled="true" /><br>
   <html:submit property="submit" value="次" disabled="true" />
</logic:equal>
<logic:notEqual name="USER" property="code" value="参照">
   名前:<html:text property="namae" /><br>
   電話:<html:text property="denwa" /><br>
   メール:<html:text property="email" /><br>
   <html:submit property="submit" value="次" />
</logic:notEqual>
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-11-18 01:23
logic:notEqual の時に JavaScript を使ってブラウザ側に disable させるのはいかがでしょう?
mandm
常連さん
会議室デビュー日: 2005/06/04
投稿数: 30
お住まい・勤務地: ニューヨーク
投稿日時: 2006-11-18 02:58
こんな具合ではいかがでしょうか?
オブジェト Userのクラスがわからないので ???にしてます。
テストしてないので、動かなかったらすいません。
(Struts-EL タグを使えば もっと 簡潔になるかもしれません。)

<%

??? user = (???) session.getAttribute("User");
String codeVal= user.getCode();
String isVisibleStr = "false";
if(codeval!=null && codeval.equals("参照"){
isVisibleStr="true";
  }

%>
   名前:<html:text property="namae" disabled="<%= isVisibleStr %>" /><br>
   電話:<html:text property="denwa" disabled="<%= isVisibleStr %>" /><br>
   メール:<html:text property="email" disabled="<%= isVisibleStr %>" /><br>
   <html:submit property="submit" value="次" disabled="<%= isVisibleStr %>" />
すひろ
大ベテラン
会議室デビュー日: 2006/10/17
投稿数: 124
お住まい・勤務地: 愛知県
投稿日時: 2006-11-18 10:16
返信ありがとうございます。

極力スクリプトレットは使わないようにしたいので、
JavaScriptでできるかどうかやってみたいと思います。
JavaScriptを使ったことがないので、私自身の技術的な問題でできるかどうか心配ですが…。

なにかヒントのようなものを頂けたら幸いです。
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2006-11-18 11:50
getElementByName("namae") で対象の要素を取得して、disabled属性
にfalseを設定する形で動作すると思います。実例は検索して調べて
みてください。

JavaScriptによりHTML属性に変更を与えるコードよりも、スクリプレットで
タグライブラリの属性に対し変更を与える書き方の方が分かりやすいかと
思います。

JSPの改修などをやった場合(便利なツール類を使用しない状態)
・タグライブラリ + スクリプレットで、スクリプレットが多様され過ぎている
・何でもかんでもタグライブラリで処理しようとしている
・タグライブラリ + JavaScriptで、JavaScriptに依存しすぎている + 仕様書なし
なJSPを相手にすると手こずることが多いです。静的なHTMLページ用の
JSPでは、ピンポイント的にスクリプレットを使った方が見通しが良いコードに
なりやすいですよ、経験上の話ですが。

山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-11-18 16:48
最初に JavaScript を提案しておきながらなんですが、<%= isVisibleStr %> の方がシンプルで良さそうですね。
>String isVisibleStr = "false";
>if(codeval!=null && codeval.equals("参照"){
>isVisibleStr="true";
>  }
ここの部分は以下のように書くのが個人的には好みです。
boolean disabled = codeval!=null && codeval.equals("参照");

JavaScript でやるなら
document.getElementById("エレメントのID").disabled=true;
といった感じでしょうか。

[ メッセージ編集済み 編集者: インギ 編集日時 2006-11-18 16:49 ]
すひろ
大ベテラン
会議室デビュー日: 2006/10/17
投稿数: 124
お住まい・勤務地: 愛知県
投稿日時: 2006-11-19 11:04
返信ありがとうございます。
皆さんのおっしゃるとおり、スクリプトレットのほうが良さそうですね。
ひとまずスクリプトレットで作ってみて、時間を作ってJavaScriptのほうも勉強してみます。
ありがとうございました。
mandm
常連さん
会議室デビュー日: 2005/06/04
投稿数: 30
お住まい・勤務地: ニューヨーク
投稿日時: 2006-11-21 03:14
>極力スクリプトレットは使わないようにしたいので、

ということなので、
JSPの ELを使えば スクリプトレットが完全に なくなります。
(Struts ELではなく JSTLのELでした)

<%= isVisibleStr %>"

の代わりに

<c:out value="sessionScope.User.isDisabled"/>

ただし、
1.UserオブジェクトのクラスにisDiabled(false/true)というプロパティを作ってActionかどこかで true/false をセットする必要あり
2.スクリプトレット の部分削除
3.JSTL core タグライブラリーの 宣言が必要です。
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>

かなりすっきりします。
私もJavascriptを使うのは、なるべく最後の手段のときですね。

スキルアップ/キャリアアップ(JOB@IT)