*◆今までハマったエラーを記入 **文字列を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"などの決まり文句などもチェックしよう。