「エラー履歴」の編集履歴(バックアップ)一覧に戻る

エラー履歴 - (2012/12/07 (金) 10:01:02) のソース

*◆今までハマったエラーを記入

**文字列をDate型に変換するのにハマった、、
まず、
 Date date = DateFormat.getDateInstance().parse(str);
を間違えて
 Date date = DateFormat.getInstance().parse(str);
って書いてて動かない~ってハマってたのと、
 Thu, 06 Dec 2012 16:41:19  +0900
↑こんな型の文字列をDate型にしようとして
ParseExceptionが出てた。
 SimpleDateFormat objFormat =
 new   SimpleDateFormat(format, locale);
 Date date = objFormat.parse(str);
フォーマットを指定して変換するのと、
↑の日付の場合、
 format = "EEE, dd MMM yyyy HH:mm:ss  Z"
 locale = Locale.ENGLISH
で指定しないと駄目っぽい。
ちなみに+0900ってのはタイムゾーン。
±0000とか±000の形なら 'Z' でフォーマット指定すればいけるけど、
 +09:00はできなかった…
誰かやり方があるなら教えろください
#comment

**MySQLのエンコードがおかしい
MySQL接続のURLに
 useUnicode=true&characterEncoding=utf8
をつけてなかったので、
ソースがUTF-8でサーバもUTF-8なのに
バグバグだった。

**jquery→Action(Seasar)で配列を送りたい
javascript側は連想配列で送ろうとして、
Action(というかForm)では普通の配列で受け取ろうとして、
 (panelList[])の設定に失敗しました。
 理由はjava.lang.NumberFormatException: For input string: ""
と出ました。
でもweb.xmlを直接書くServletでは動くみたい。謎。
[[参考>>http://d.hatena.ne.jp/t-horikiri/20110303/1299112600]]

&bold(){追記}
var list = {};
ajax(url: "method", data: { "fieldName", list })
で一応送れた。
list = {};でオブジェクトとして定義してやるのがミソらしい。
でもごちゃごちゃ書いてあるソースに移動したら途端に動かない、、(泣
あと、int[]では駄目で、String[]限定らしい。
この一連のExceptionはSeasarのバグらしい。

**jqueryでプラグインの関数は、呼んだ分だけ設定される
diceプラグインで
 $("#dice").dice();
を複数回呼ぶと、クリックした時に
↑を呼んだ回数分中の処理が実行されて
おかしなことになる。
clickとか複数回呼ばなくちゃいけない場合は、
 ("#dice").unbind('click');
unbindを呼んでから再度呼ぶ。

**value=""(デフォルト)を書いて、前の画面のデータが表示されない
Servlet側とjspを自分で作る場合、初期値にvalue=""などを設定するのは必要だが、
Strutsでvalue=""をやってしまうと、初期値がテキストボックスに入力されない。
ちなみに前の画面で入力したデータをForm名と同じ名前でPOSTされる。

**SQL文でorder byを途中に書いてエラー
order byは必ず最後に書かなければいけない。
SeasarのSQL文を作るフレームワークでも同じ。
ついでにlimit関数はOracleでも普通に使えます

**プロジェクトをコピーして、実行してもページがないというエラーになる
eclipseでプロジェクトをコピーすると
いろいろなリンクがコピー前のプロジェクトになっていることがあります。
サーバを起動した時にアップロードしてるファイルパスを調べたり、
プロジェクトプロパティを開いて、パスを確認したりしましょう。

**SingletonS2Container最強
Seasarでカスタムバリデートを作った時、
validate関数側でデータベース接続しようと思ってもできずに困ってました。
本来はデータベース接続して、validateを行いたい場合はFormに書いたりして、
validateでは文字列の中身をチェックしたりする為にあるらしいが。
でも、SingletonS2ContainerでConnectionクラスなどを直接呼び出して、
データベース接続することはできるようだ。
このやり方は結構使うべきでないところでも使えてしまうので、最終手段として残しておく。
本当に実装したいのに無理な時に使おう。

**validate関数を作って、呼び出す時アノテーションが先に呼び出される
変数にアノテーションで@Requiredなどを書き、
関数に@Execute(validate="methodName", input="hoge.jsp")と書くと、
まずアノテーションチェックが通り、その後関数に登録したvalidate関数が呼ばれる。
※@Execute(valida&bold(){tor}=true)と@Execute(valida&bold(){te}="method")は語尾が違うので注意
その為、A,B,Cをチェックしたい場合とCのみチェックしたい場合は
アノテーションでCのみ(毎回チェックするもののみ)チェックして、
自分で作った関数でAとBをチェックすれば実装できる。
エラーメッセージなどはエラーが発生する場合しか表示せず、
アノテーションで引っかかってると、元の画面に戻ってるのに
エラーメッセージが表示されないし、ログにも何も表示されないので
わかりにくいので注意。

**検索機能を作った時、何度もできましたって言ったものの
こっち直したらこっちが壊れた…などで何回も呼んでしまった。
エラーチェックはちゃんとやろう。

入力チェックは、
-正常な値が入力された場合
-何も入力してない場合
-入力はされているが意図しない値が入力された場合(2byte文字や数字や記号など)

**javascriptでエラーの見方が分からずに、ハマった。
FireFoxでツール→ウェブ開発ツール→エラーコンソールで
エラーを見ることができる。
関数の文字列もあってるし、include先の関数もちゃんとあるのに、エラーが出る場合は
type="text/javascript"などの決まり文句などもチェックしよう。