ひよっこPGの勉強の記録

俺の俺による俺のための技術日誌  ~ イカれたダンスで答えを探すだけさ ~

上記の広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書く事で広告が消せます。
javascriptの中でsessionの中の値を扱いたい!
と思ったことはありませんか?

ビジネスロジックの中でsessionにフラグを設定して、
javascriptの中でフラグを見て表示を切り替えるとか、
別の画面に遷移させるとか。
ビジネスロジックの結果を利用したいケースはあると思います。

しかし、
javascriptがクライアント側で動いているのに対して、
sessionはサーバー側で動いているので、
javascriptでsessionを扱う事は出来ません…。

じゃあ、
「javascriptの中でsessionの中の値を扱うにはどうしたらいいの?」
という疑問が出てくるかと思います。

これはページのテンプレートに使用しているファイルの形式によるのですが、
jspであればsessionの中の値を扱うのは可能です。

jspはサーバー側でコンパイルが行われるので、
そのタイミングでsessionの中から値を取ってjspに保持するようにすれば
javascriptでもsessionの中の値を扱うことが出来ます。

具体的には以下のようなコードになります。

//sessionの中から値を取り出す
<%
String value = (String)session.getAttribute("KEY");
%>

//javascriptで値を使用する
<script type="text/javascript">
var val = <%=value%>
//以下、処理を書く
・・・・・
</script>

jspのコンパイルが先に行われるので、
javascriptで処理を行う時には値は設定されています。
Requestには
If-Modified-SinceやLast-Modified等の日付が
セットされることがあるかと思います。

この日付はフォーマットがかけられていますが、
どこでかけられているかご存知でしょうか。

実は…apサーバの方でかけられています。
しかも、dateformatのパターンやロケールはapサーバの方で決めています。
その為、外から好みの形式に変更する事が出来ません。

apサーバに依存したくない場合は、
filter内でrequestをキャッチして対応するのがベストです。
myfacesで作成したアプリをweblogicで動かす際には、注意しなければいけないことがあります。

1、ServletRequestをimplementsしているクラスがある場合

weblogicでrequestクラスをキャストしている箇所があるのですが、
その時にServletRequestではなく、ServletRequestWrapperにキャストしています。
その為、ServletRequestをimplementsしているとClassCastExceptionが発生します。

この対策としては、ServletRequestをimplementsしているクラスを、
ServletRequestWrapperを継承するように修正すればOKです。


2、レンダラクラスでjavascriptファイルを追加している場合

weblogicでリクエストにセットされたIf-Modified-Sinceを取り出す箇所があります。
取り出す途中で文字列で取り出したIf-Modified-Sinceの値をdateFormatを使用してDate型に変更している個所があるのですが、その時にdateFormatにセットされているロケールがIf-Modified-Sinceの値の形式と異なっています。
その為、日付のフォーマットが正常に行われず、IllegalArgumentExceptionが発生します。

この対策としては、weblogicの方で日付のフォーマットをさせないようにする必要があります。
filter等でリクエストをラップして、その中で日付をフォーマットするようにすればOKです。
ruby on rails を弄ってみました。
手順は以下の通り。

1、rubyをインストールする
rubyのサイト(http://www.ruby-lang.org/ja/downloads/)からインストーラーをDLして下さい。
DLしたら、そのファイルを実行すればOKです。
これで、ruby on rails のインストールに必要なRubyGemsも手に入ります。

2、railsをインストール
コマンドプロンプトを開いて、
 gem install rails
と入力して下さい。
途中でrailsで使用する各クラスのインストールをどうするかを聞かれますが、
全て”Y”を選択すればOKです。

3、アプリケーションのひな型を作成
インストールが完了したら、アプリのひな型を作成します。
コマンドプロンプトを開いて、
 rails demo
と入力して下さい。
コマンドプロンプトで開いているフォルダに”demo”のフォルダが作成されていればOKです。

4、データベース作成
コマンドプロンプトで3で作成したdemoフォルダに移動し、
 ruby script/generate migration CreateTables
と入力して下さい。
demo\db\migrateのフォルダの中に”日付_create_tables.rb”のファイルが作成されていればOKです。

5、ファイル編集
4で作成した”日付_create_tables.rb”のファイルを開いて、以下のように編集して下さい。

class CreateTables < ActiveRecord::Migration
def self.up
create_table :entries do |t|
t.text :title, :content
t.integer :no
end
end

def self.down
drop_table :entries
end
end

create_tableのDBにentriesというテーブルを作成しています

6、テーブルを作成
コマンドプロンプトで3で作成したdemoフォルダに移動し、
 rake db:migrate
と入力して下さい。

ここで、
”no such file to load -- sqlite3”
というエラーが出てしまった場合は以下の手順を追加して行って下さい。
 (1)コマンドプロンプトを開いて、
    gem install sqlite3-ruby --version '= 1.2.3'
   と入力
 (2)sqlite3のサイト(http://www.sqlite.org/download.html)からsqlite3.dllを入手し、
   WINDOWS\SYSTEM32のフォルダの中に置く

エラーが出なかったらOKです。

7、クラスの生成
作成したテーブルを操作するクラスを作成します。
コマンドプロンプトを開いて、
 ruby script/generate model entry --skip-migration
と入力して下さい。

8、アプリを作成
コマンドプロンプトを開いて、
 ruby script/plugin install scaffolding
 ruby script/generate scaffold entry title:string content:string no:integer --skip-migration
と入力して下さい。

9、サーバー起動
コマンドプロンプトを開いて、
 ruby script/server
と入力して下さい。
ブラウザに”http://localhost:3000/entries”と入力してアクセス出来ればOKです。

10、動作確認
以下の事を確認して下さい。
・画面に”Listing entries”と表示されている事
・”New entry”のリンクを押下した際に、”New entry”と表示されている画面に遷移する事
・”back”のリンクを押下した際に、”Listing entries”と表示されている画面に遷移する事

確認出来れば、ryby on railsの動作はOKです。
geronimoを使用する上で注意したい点があります。
それは…関係のあるファイルなりフォルダなりのパスに日本語とスペースを含めないこと。
これらが含まれていると、正常に動かないことがあります。

実際にwarファイルのパスにスペースがあった為に、デプロイが出来なかったことがありました。
また、jdkのファイルへのパスにスペースがあった為、デプロイ後の動作が正常でなかったことがありました。

geronimoを使用する時は、メインドライブの直下に専用のフォルダを設けた方がいいでしょう。
つまらない、バグに悩まされたくないのであれば…。