「エラー履歴」の編集履歴(バックアップ)一覧はこちら

エラー履歴」(2013/03/04 (月) 14:08:11) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

*◆&this_page() ※今までハマったエラーを記入 #contents() ---- **FireFoxでjQueryのclone使うと、hiddenの値が返ってこない FirefoxでSeasar2でSAStrutsでWebページを作ってます。 セレクトボックスをjQueryのcloneで複製して、 次の画面に遷移し、ブラウザのバックボタンで戻ってくると hiddenの値が初期化される現象が発生しています。 formはjavascriptでsubmitを呼んでいます。 testページ作っても再現しないので、何か他の原因があるのかもー;; とりあえず、clone使わなければちゃんとした値が返ってくるので そっちでやる方向で。 一応こんな例もあるらしい。 [[Firefoxでclone使ったがバグった]] **chromeでのみ、Ajaxで中身を書き換えたhiddenの値が復元されない Seasar2でSAStrutsの環境で、 FormにInstanceTypeを何も指定せずに hiddenの値を書き換え、javascriptで document.forms[0].action = "methodName"; document.forms[0].submit(); とやると発生する稀少なバグ。 chromeで戻る画面のURLが変わると別の画面に遷移するような 動作をするという仕様(?)らしい。 A画面では最初「go」というactionが定義されている。 それをJavascriptで「next」というaction名に書き換え、 submitして、B画面に遷移する。 そこでブラウザの戻るボタンを押下。 ブラウザではA画面のフォームのaction「next」と想定して 画面遷移するが、実際はaction「go」しかないので 別画面と勘違いし、復元せずに別画面に遷移したような動作になる。 …らしい。。 <form>内にaction名(Actionクラスのメソッド名)を nameとvalueに書いたhiddenを用意して、 submitするとそこに遷移するらしいので、 それをやると正常に動作した。 <form> <input type="hidden" name="next" value="next" id="actionName" /> <input type="button" value="次の画面へ" /> </form> <script> // ボタンとか押した時に呼ばれる function submit() {   // ここでこういう風にaction名を書き換えられる   document.getElementById("actionName").name = "next";   document.getElementById("actionName").value = "next";   document.forms[0].submit(); } </script> **DOCTYPEでcssのhoverとposition:absoluteの動作が変わる IE7での動作を比較しました。 <html>タグの前に ◆互換モード <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> を指定した時は、座標指定は自由に設定できるが、 hover(マウスオーバーした時のデザインを変更するcss)がうまくいかない。 通常時のcssは反映されているが、 マウスカーソルを合わせてもデザインが変わらない。 ◆標準モード <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> を指定した時は hoverは正常に動作するが、position: absolute がうまくいかない。 relativeも使ってるけど、はずしてもおかしな座標に表示される。 恐らくhoverはIE7からaタグ以外で使えるようになったりなど、 関係しているかもしれないが…定かではない。 [[参考>>http://desperadoes.biz/style/mode.php]] **StrutsでActionMessageを表示しようとしてハマった、、 struts-config.xmlでpropertiesファイルを読み込んでるのに、 new ActionMessage("エラーメッセージ") と書いて表示されず、ハマった… propertiesがあるなら、そっちにコードと内容を書いて それを使わないと、propertiesファイル内から エラーメッセージ=エラーメッセージ内容 が書いてあるところを探して見つからず、表示されない。 正しくは、 Action or Form 内 new ActionMessage("error.message"); // saveErrorとかに渡してね propertiesファイル (WEB-INF/classesの中とかにある筈、なければ作るとか) error.message=エラーメッセージ内容 という感じで使う。 ActionMessageを発行すれば、servletが呼ばれ続ける限り 次の次の次の画面でもActionMessageを取得できる。 **文字列を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 で指定しないと駄目っぽい。 あとjava.sql.Dateに変換するなら、こう。 new java.sql.Date(toDate(str, format, locale).getTime()); ちなみに+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"などの決まり文句などもチェックしよう。
*◆&this_page() ※今までハマったエラーを記入 #contents() ---- ** forwardでNoSuchMethodError jdkのバージョンの問題。 コンパイラとサーバのJDKのバージョンが違うと発生するらしい。 今回はservlet-api.jarのバージョンが違うのが問題だった。 **FireFoxでjQueryのclone使うと、hiddenの値が返ってこない FirefoxでSeasar2でSAStrutsでWebページを作ってます。 セレクトボックスをjQueryのcloneで複製して、 次の画面に遷移し、ブラウザのバックボタンで戻ってくると hiddenの値が初期化される現象が発生しています。 formはjavascriptでsubmitを呼んでいます。 testページ作っても再現しないので、何か他の原因があるのかもー;; とりあえず、clone使わなければちゃんとした値が返ってくるので そっちでやる方向で。 一応こんな例もあるらしい。 [[Firefoxでclone使ったがバグった]] **chromeでのみ、Ajaxで中身を書き換えたhiddenの値が復元されない Seasar2でSAStrutsの環境で、 FormにInstanceTypeを何も指定せずに hiddenの値を書き換え、javascriptで document.forms[0].action = "methodName"; document.forms[0].submit(); とやると発生する稀少なバグ。 chromeで戻る画面のURLが変わると別の画面に遷移するような 動作をするという仕様(?)らしい。 A画面では最初「go」というactionが定義されている。 それをJavascriptで「next」というaction名に書き換え、 submitして、B画面に遷移する。 そこでブラウザの戻るボタンを押下。 ブラウザではA画面のフォームのaction「next」と想定して 画面遷移するが、実際はaction「go」しかないので 別画面と勘違いし、復元せずに別画面に遷移したような動作になる。 …らしい。。 <form>内にaction名(Actionクラスのメソッド名)を nameとvalueに書いたhiddenを用意して、 submitするとそこに遷移するらしいので、 それをやると正常に動作した。 <form> <input type="hidden" name="next" value="next" id="actionName" /> <input type="button" value="次の画面へ" /> </form> <script> // ボタンとか押した時に呼ばれる function submit() {   // ここでこういう風にaction名を書き換えられる   document.getElementById("actionName").name = "next";   document.getElementById("actionName").value = "next";   document.forms[0].submit(); } </script> **DOCTYPEでcssのhoverとposition:absoluteの動作が変わる IE7での動作を比較しました。 <html>タグの前に ◆互換モード <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> を指定した時は、座標指定は自由に設定できるが、 hover(マウスオーバーした時のデザインを変更するcss)がうまくいかない。 通常時のcssは反映されているが、 マウスカーソルを合わせてもデザインが変わらない。 ◆標準モード <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> を指定した時は hoverは正常に動作するが、position: absolute がうまくいかない。 relativeも使ってるけど、はずしてもおかしな座標に表示される。 恐らくhoverはIE7からaタグ以外で使えるようになったりなど、 関係しているかもしれないが…定かではない。 [[参考>>http://desperadoes.biz/style/mode.php]] **StrutsでActionMessageを表示しようとしてハマった、、 struts-config.xmlでpropertiesファイルを読み込んでるのに、 new ActionMessage("エラーメッセージ") と書いて表示されず、ハマった… propertiesがあるなら、そっちにコードと内容を書いて それを使わないと、propertiesファイル内から エラーメッセージ=エラーメッセージ内容 が書いてあるところを探して見つからず、表示されない。 正しくは、 Action or Form 内 new ActionMessage("error.message"); // saveErrorとかに渡してね propertiesファイル (WEB-INF/classesの中とかにある筈、なければ作るとか) error.message=エラーメッセージ内容 という感じで使う。 ActionMessageを発行すれば、servletが呼ばれ続ける限り 次の次の次の画面でもActionMessageを取得できる。 **文字列を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 で指定しないと駄目っぽい。 あとjava.sql.Dateに変換するなら、こう。 new java.sql.Date(toDate(str, format, locale).getTime()); ちなみに+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"などの決まり文句などもチェックしよう。

表示オプション

横に並べて表示:
変化行の前後のみ表示: