2008-01-01から1年間の記事一覧

ファイルアップロードの上限サイズを超えてもindexメソッドに制御が移らないケース

ファイルアップロードの上限サイズを超えた場合について、SAStrutsのサイトでは以下のように記述されています。 アップロードされたファイルのサイズが、あらかじめ決められた上限(struts-config.xmlのcontrollerタグのmaxFileSize属性の値) を超えた場合、S…

Hot Deploy利用時に、Hot Deploy対象外クラス内でHot Deploy対象クラスを使うための正しい作法は?

「Hot Deploy」「Hot Deploy」連呼によって、今までで一番長いタイトル。。気を取り直して本題を。SeasarのHot Deploy機能はアプリケーションサーバーの再起動不要で修正コードがすぐに反映されるという便利な反面、ちょっとフレームワークの拡張をした時に…

いつのまにかSeasarユーザーのためのハブサイトが出来ている!

検索していたらたまたま見つけたサイト。 seasar-users.jp へようこそ! このサイトでは Seasar を使って高品質な Web アプリケーションを開発するための情報を提供しています。 Seasar を既に利用されている方だけでなく、これから Seasar を利用してみよう…

S2RequestProcessorとインターセプターは相性が悪い?

ActionMessagesExceptionをキャッチしたら前ページへ、@Execute(roles="xxx")で権限なし例外があったら指定されたページへ、それ以外の例外は指定したページへ・・・みたいな感じにしたかったんだけど、ちょっとうまくいかない。というのも権限チェックはS2R…

実行メソッドのindexメソッドは必ず必要?

SAStrutsに限った話ではないですが、WEB-INF/web.xmlに以下のように404エラーのエラーページ設定を入れておけば、存在しないURLへアクセスすると指定したエラーページへ遷移させることが出来ます。 <error-page> <error-code>404</error-code> <location>/WEB-INF/view/error/404NotFound.jsp</location> </error-page> 色々なURLを打…

ActionFormについて思うこと

先々週辺りに発覚したActionのpublicフィールドの予期せぬ自動バインドの問題。→参照:ぱる日記 これを受けて次のリリースからはActionFormの使用を推奨するようで、それに伴ってか、ActionForm周りで色々と動きがありそうです。 ActionFormの名前はxxxDtoか…

Entity単位のServiceに共通の親クラスを持たせる

元ネタは続・SAStruts + S2JDBCのアーキテクチャに載っていたServiceで共通的に使うメソッドを共通親クラスに抽象化したメソッドで持たせるという考え。ジェネリクスを使ったクラス設計なぞしたことが無い自分には良い刺激を受けました。 元記事ではユースケ…

HOT deployとCOOL deployで挙動が違う?

少し前に各所で話題にのぼっていたid:cypher256さんの一連のSAStruts関連のエントリー。実際の案件に適用しての話なので、すごく参考になります。このエントリーの中で@Reset アノテーション - cypher256's blogを試してみたのですが、なぜか動かない。 デバ…

メッセージの渡し方

生StrutsのActionクラスではsaveMessagesメソッドを使えば、ビューへメッセージを渡せますが、SAStrutsではどうやって渡すのか調べてみたら、ActionMessagesUtilというユーティリティクラスが用意されていました。Actionクラスでの使い方は以下のような感じ…

カレントパスを気にせずにjspにcssファイル等のパスを指定する方法

同じjspを使う場合であってもurlが/employeeと/employee/indexなどとカレントパスが異なる場合があるので、jsp内でcssファイルなどを相対パスでベタ書きした場合には、どちら一方は正しくないパスとなってしまいます。なにかSAStruts側で用意されていないか…

global-exceptionsでキャッチできるのはRuntimeExceptionのサブクラスのみ?

Exceptionのサブクラスをstruts-config.xmlのglobal-exceptionsに定義していもキャッチできず、RuntimeExceptionのサブクラスであればキャッチできました。これって生Strutsの仕様だったかなぁ?S2Strutsを使っていた時にはExeptionのサブクラスでもキャッチ…

インターセプター内でもJdbcManagerがインジェクションされる

Action用のインターセプター内でDB接続したかったので色々試していたら、Actionと同様にJdbcManagerをpublicフィールドで定義しておけば自動的にインジェクションされた! public class HogeInterceptor extends AbstractInterceptor { public JdbcManager j…

JDBCレルム認証で権限管理

『Executeアノテーションでつけられるroles属性によって、ユーザのロールによってアクセス制御をかけることができる』ということは、 マニュアルを見れば一目瞭然なのですが、DBを使ってユーザー認証をした後にロールをどうやってセットすればよいのかが分か…

SAStrutsことはじめ

次のJAVA案件をSAStruts+S2JDBCでいってみようかと現在調査中。Seasar2の経験はSeasar2.3+S2Struts(設定ファイル有)+S2Daoの構成で数回あります。 過去の資産があるので、わざわざSAStrutsを使う必要も無いかと思ったのですが、 ここのところずっとPHP…

CakePHP善戦、しかし圧勝したのは...

PHP

何の話かというと、先日行われていた次のアンケート。自分としては意外(?)な結果が。PHPプログラマーの方でPHP用フレームワークを使っている方へアン… - 人力検索はてな「現在使っている」「自分がフレームワークを選ぶ場合」の両方でpradoが圧倒的に票を獲…

モデルの指定列からselectタグを作るのに便利な方法

1.1系ではModel::generateList()メソッドを使えば、モデルから指定した列のkeyとvalueがペアとなった配列が取得でき、selectタグを作るのに便利でした。 1.2系ではそのgenerateList()は非推奨メソッドとなり、 「1.2系ではgenerateList()の代わりにModel::fi…

訪問済みリンクの文字サイズを大きくするというアイディア

訪問済みリンクの文字色は変える というのは、ユーザビリティ的には常識だと思います。かのヤコブ・ニールセン博士も過去に取り上げています。参照:訪問済みリンクの色は変えるべし – U-Site 訪問済みリンクの文字サイズを大きくする という方法を見かけた…

Eclipse PDTで日本語マニュアルサイトを開くようにする設定

Eclipse PDTでは、PHPネイティブの関数にカーソルをあててマウスの右クリック⇒「PHP マニュアルを開く」を選択するとPHPマニュアルのページを開くことが出来ます。関数の使い方を忘れた時などに重宝するので、知っておくとちょっと便利です。ただ、デフォル…

モデルのqueryメソッドでfind、findAllと同等の返り値を得る方法

常識かもしれませんが、明言されている記事が見つからなかったのでエントリー。動作確認バージョンは毎度のBeta 1.2.0.6311です。 queryとfind、findAllでの返り値の違い 例えばfindAllとqueryのそれぞれを使って全件取得した結果の違いを見比べてみます。(…

名前付きでパラメータを受け取る方法

1.2系での話です。(バージョンはBeta 1.2.0.6311) 通常 PostsControllerのhogeメソッドにアクセスする時のURLは http://localhost/posts/hogeとなります。ここに何かしらのパラメータを渡そうとするとhogeメソッドに と引数を受け取れるように定義した上で …

$form->inputで行われる自動判別のまとめ

1.1系ではHtmlHelperにあったinputメソッドが、1.2系ではFormHelperに移っています。使い方としては input('field_name', array('type' => 'textarea' /* テキストエリア指定 */)); ?> などといった感じで、オプション指定の配列にtypeを指定することで、テ…

validationのメッセージ出力をDRYにしてみる

1.2系で色々と便利になっているvalidation機能ですが、エラーメッセージ出力については「DRYじゃない」と感じる点があります。 今回はそれを解消することを試みてみました。(バージョンはBeta 1.2.0.6311) 「DRYじゃない」と感じる点 同じruleのメッセージを…

継承は is-a、委譲は has-a または uses-a

「継承は is-a の関係」というのはオブジェクト指向の基本ですが、最近は何でも安易に継承を使ってしまうことが多かった自分を戒めてくれたのがこちらの本。アジャイルプラクティス 達人プログラマに学ぶ現場開発者の習慣作者: Venkat Subramaniam,Andy Hunt…

AuthComponentのパスワード暗号化を無効にする方法

1.2系で追加されたAuthComponentは、認証関連の処理を一手に担ってくれる強力なコンポーネントですが、 AuthComponentのパスワード暗号化。登録注意点。CakePHP1.2b - CPA-LABテクニカル http://blog.ne2ma2.com/archives/161 等で紹介されているように、パ…

1.2系でヘルパーからコンポーネントへアクセスする方法

まず1.1系では 例えば HogeComponent にアクセスしたいヘルパーに $this->view->controller->HogeComponent->method(); というように書けば、HogeComponent の method にアクセスできる。 CakePHP ヘルパーからコンポーネントへのアクセス方法 | Sun Limited…

URLベースで言語の切り替え

1.2系の多言語機能を使って、URLベースで言語の切り替えをするサンプルを書いてみた。サンプルでは日本語と英語に対応するアプリを作る場合を想定。app\config\routes.phpに以下の2行を追加。 Router::connect('/ja/:controller/:action/*', array()); Route…

1.2系の多言語対応メモ(3)

引き続き多言語対応で分かったことのメモ。 コア部分の翻訳ファイルは存在した 1.2系の多言語対応メモ(1) - Writing Some Codeでコア部分を含めた翻訳ファイルの作り方を紹介しましたが、日本のフォーラムのhttp://cakephp.jp/modules/newbb/viewtopic.php?v…

1.2系の多言語対応メモ(2)

前回の記事の続きです。 指定した言語の翻訳が存在しない場合は引数の値(msgid)がそのまま表示される 指定した言語のlocaleのフォルダやpoファイルがない、対訳が存在しない等の場合、__()関数の第1引数の値(msgid)そのものが表示されます。なので、引数の…

1.2系の多言語対応メモ(1)

CakePHPの1.2系から多言語機能が充実しています。多言語対応の方法としては、翻訳テキストを使う方法(gettextを利用する場合と同等の方法)とDBを使う方法の2種類がありますが、今回の話は前者のほう。 まず失敗談 Bakeryのコチラの記事によると、コンソー…

単語からCakePHPの命名規約を調べられる便利なツール

これは便利! CakePHP規約ワードメーカー WordMaker for CakePHP Conventions - CPA-LABテクニカルCakePHP関連の情報を検索していた時に偶然見つけた記事ですが、 こちらの方が公開している『CakePHP 規約ワードメーカー WordMaker for CakePHP Conventions…