- PR -

JSPの内容を変える方法

1
投稿者投稿内容
未記入
会議室デビュー日: 2006/01/25
投稿数: 18
投稿日時: 2006-02-16 08:56
JSPにボタンを用意して権限ごとに押せる押せないを
設定している画面があります。

DB上で権限を切り替えてもJSPは前の状態でコンパイルされて
いるので、ボタンの状態が変わらなくて困っております。

どなたかよい方法があれば教えてください。
よろしくお願いします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-02-16 09:22
異なる JSP を用意していて、アクセスする人ごとに置き換えて再コンパイルされるのを期待しているということでしょうか?
つまり、質問の根本は「JSP ファイルを更新したのに再コンパイルされない」ということですか?
だとすれば JSP の更新チェックがちゃんと行われる設定になっているか確認しましょう。
たとえば WebLogic Server では jsp-descriptor の pageCheckSeconds パラメータで指定します。
http://edocs.beasys.co.jp/e-docs/wls/docs81/webapp/weblogic_xml.html#1055154

しかし、アクセスする人毎に JSP を書き換える方法では同時にアクセスが来た場合に対応できませんし、パフォーマンス的にも我慢ならない状態になるでしょうからお勧めしません。
JSP 内に表示ロジックを書いて表示・非表示を切り替える方法をお勧めいたします。

また、表示だけでなく isUserInRole() でサーブレット側でも権限の有無を確認するのをお忘れなく。
http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/http/HttpServletRequest.html#isUserInRole(java.lang.String)

ボタンが無効になっていてもボタンを押したのと同じリクエストを発行することはできますので。

[ メッセージ編集済み 編集者: インギ 編集日時 2006-02-16 09:25 ]
未記入
会議室デビュー日: 2006/01/25
投稿数: 18
投稿日時: 2006-02-16 09:37
インギさんありがとうございます。

現在はJSPでJAVA Scriptを使用して使える使えないを切り替えています。
画面表示時にDBから権限の値を取得してbean:writeで取得し、
その値によってボタンを切り替えてます。

1回目に制限のかかったユーザーでログインして、ログアウト。
2回目に管理者権限ですべてのボタンが使えるユーザーでログインすると
1回目のボタンの状態のままになっています。
それをなんとかしたいのです。。。

>また、表示だけでなく isUserInRole() でサーブレット側でも権限の有無を確認するのをお忘れなく。

確かにそうですねー。
さっそく直します。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-02-16 09:49
えーと、JSP コンテナではなく JavaScript の話ということでしょうか?
「DB上で権限を切り替えてもJSPは前の状態でコンパイルされている」というのがイマイチわかりません・・・。

bean:write で取得、とあるので JavaScript を動的に出力しているのではないかと推測しますが、JavaScript は期待通りに出力されているでしょうか?
・bean:write で期待される値が出力されているか
・出力されている JavaScript でボタンの状態を適切に変更できるのか
といった点を確認してみてはいかがでしょう。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2006-02-16 09:52
JSPの中にはHTMLだけではなく、Javaのコードも書けます。
DBから権限の値を取得した時点で、
管理者の場合だけすべてのボタンのHTMLを書き出すよう、Javaで作ればいいでしょう。
未記入
会議室デビュー日: 2006/01/25
投稿数: 18
投稿日時: 2006-02-16 10:11
インギさん、mioさんありがとうございます。

Java Scriptで書き出す順番が違っていたみたいで
うまく表示されなかったみたいです。
もうちょっと修正すればできそうですが、
もし無理であればmioさんの言われる様に
>管理者の場合だけすべてのボタンのHTMLを書き出すよう、Javaで作ればいいでしょう。
の方法で修正しようと思います。

インギさん、mioさんどうもありがとうございました。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-02-16 12:38
bean:writeタグは内部でJavaのコードが実行されているだけで、
直接JSPにJavaのコードを書かなくても済むようにしているだけです。

logicタグに条件分岐を行うタグがあるので
それを使ってみてはいかがでしょうか。

あと、結果が変わらない場合はブラウザのキャッシュが残っているケースもあります。
今回は当てはまらないようですが、レンダリングされるHTML/JavaScriptが
キャッシュってケースもあるので注意が必要です。

また、JavaScriptで権限管理のフラグを持つっていうのは
少々知識があれば幾らでも回避できますし、
JavaScriptが無効であれば動作しないので危ないです。
1

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