attr()で追加したonclickがIEで動作しない
ので、要素に対してhtml()とかでタグとして追加してやる。
$("#delete").html("<a href=\"javascript:void(0);\" onclick=\"deleteImage('" + key + "')\">削除</a>");
clickのイベントハンドラは使わない場合の話。
セッションの有効期限
HttpSession.setMaxInactiveInterval()で設定する有効期限はサーバでの有効期限。
CookieでセッションIDを管理している場合、ブラウザが閉じられるとCookieは破棄されるので、セッションは継続しない。
自動ログインのように、ブラウザが一度閉じられてもセッションを継続させたい場合は、Cookieの有効期限を設定する必要がある。
HttpSession session = request.getSession(true);//この時点でCookieにセッションIDが設定される session.setMaxInactiveInterval(60 * 60 * 24 * 10);//セッション有効期限10日 Cookie cookie = new Cookie("JSESSIONID", session.getId());//自前でセットするCookieを作る cookie.setMaxAge(60 * 60 * 24 * 10);//Cookie有効期限10日 cookie.setPath("/"); response.addCookie(cookie);//Cookieの設定を上書き
こんな感じ〜
ちなみに、試すときはブラウザの設定をよく確かめよう・・・ハマッタ。
jQueryでcheckboxの値を取得
何も考えずval()ってしまうとチェックしていなくても値が取れてしまうので次のようにする。
if($('#checkelem').attr('checked')){ var value = $('#checkelem').val(); }
時間の扱い
すぐに忘れるのでメモ。
JSTの日付を取得したい
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); sdf.setTimeZone(TimeZone.getTimeZone("JST"));//タイムゾーンを必ず指定するようにすれば間違いはない System.out.println(sdf.format(new Date()));//UTCのDateオブジェクトがJSTのyyyy/MM/ddに変換される
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("JST"));//タイムゾーンをJSTに cal.setTimeInMillis(System.currentTimeMillis());//現在のUTCミリ秒をセット cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); //時間を0時丁度にセット cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); System.out.println(cal.getTimeInMillis());
任意の日付を取得したければ上記二つを組み合わせればおk
System.out.println(sdf.format(new Date(cal.getTimeInMillis())));
基本的に比較やらなんやらで時間を扱うときはすべてUTCミリ秒で考えれば簡単だ。
FORMプラグインでファイルアップロードしてレスポンスをJSONで受け取る
レスポンスに次のようなjsonが返ってくるとする。
{"header":{"message":"successful","status":"0"}}
ajaxSubmit()でファイルをアップロードするとiframeを使うので、レスポンスのContent-typeがapplication/jsonだとjsonのファイルをダウンロードしようとしてしまい上手く動かない。
なのでレスポンスをtext/plainにしてやると動いた。
が、FFでは動くんだけどIEだと動かない。
$('#form1').ajaxSubmit({ dataType:'json', success:function(data){ alert(data.header.message);// } });
そこで、少々強引だがContent-typeをtext/htmlレスポンスして処理することにした。
※text/htmlだとダブルクオートのエスケープシーケンスがダブルクオートとして読み込まれてしまいパースできなくなる
dataTypeをjsonではなく、xmlとして処理すればうまくいく。
$('#form1').ajaxSubmit({ dataType:'xml', success:function(data){ var jsonText = $('body', data).text(); var json = $.parseJSON(jsonText); alert(json.header.message); } });
iframeには次のようなhtmlが出力されるのでxmlとして解析してやればおk
<head></head><body>{"header":{"message":"successful","status":"0"}}</body>
本来なら、ファイルアップロードはその他のフォームデータとは別に処理するようにして、レスポンスをjson以外にしてやればいいことなのかもしれないけど、面倒なのでこの方法でとりあえずは良しとしよう。
動いてるし。