SAStruts

スケジューラ公開 - 問題発生

http://d.hatena.ne.jp/n-kizashi/20080823#c1219580351で kuroppe さんが不具合を報告してくれている。Eclipse3.4(ganymede)をインストールしたついでに、公開したschedulerをインポートし、動かしてみた。認証はちゃんと動きました。が、文字化けしていま…

スケジューラ公開したけど・・・

あら。そんなもんか。 とくに反応なしと・・・。よく考えたらそんなもんかもな。

スケジューラ公開

うわっ、はずかしっ。 やってもうた。ダウンロードページえっと、動かないかもしれません。 でも、たぶん動きます。たぶん・・・。なにかあったらコメントください。 SAStrutsの使い方でおかしい部分があってもコメントください。JAVAとしておかしい部分の指…

hsqldbに対応した

結構いろいろハマったけど、hsqldbに対応した。 基本的には、s2jdbc.dicon と jdbc.dicon しかさわっていない。hsqldbの起動部分についてはよくわからなかったので、ほとんどsa-struts-tutorialのパクリ。あとはいろいろ整理しないと。

ActionMessagesExceptionの位置づけ(2)

いや、やっぱあかんわ。 ActionMessagesExceptionはService層で投げるのは気持ち悪い。Service層は純粋にロジックの結果を返してくれたらいい。結果を受けてどう表示するかを判断するのがAction層だ。ActionMessagesExceptionはメッセージキーを引数で受け取…

ActionMessagesExceptionの位置づけ

ActionMessagesExceptionって、Action以外、たとえばService層でスローするのってアリなんだろうか。なんとなく気持ちが悪いというか、Service層のクラスの独立性が下がるというか。とはいえ、そもそもどっかのプロジェクトに持っていって再利用することなん…

コンテナ認証からアプリのDB認証へ

コンテナ認証をやめて、DB認証に作り変えている最中である。 理由は、 誰にも望まれていないが公開を考えるとそのほうがよいだろうということ 実際PJなどではアプリでDB認証する場合がほとんどであるので実装を経験しておいたほうがいいかなということ それ…

とf:h()の半角スペースの扱い

入力した文字列を表示する画面があった場合、「そのまま」表示するべきだと思う。しかし意外なことに、SAStrutsのf:h()は、Spaceは実体参照化されていないため、一続きの半角スペースは見かけ上ひとつ分の半角スペースとなってしまう。f:h()だけなのかが気に…

やっぱりBaseAction

生Strutsを使っていたときは、必ずあったBaseAction。仕事としては、前にも書いたかもしれないけど、 Template Methodパターンをつかった事前処理と事後処理と例外処理と子Action用のabstractなメソッドの定義 事前はアクセスログ的な処理とかトランザクショ…

テキスト入力エリアでのエンターキー問題(IEのみ?)- 回避

IEでテキストフィールドでエンターキーを押下した際に、ボタンのnameがリクエストに追加されないのは、なんとかしたい感じ。 2008-08-06 - Think Not Forever の回避手段として、 <input type="submit" name="create" value="記入" /> <input type="hidden" name="create" value="dummy" /> みたいにダミーのhidden…

1.0.4-rc1対応

昨日、開発はひととおり終わったと書いたが、SAStrutsが1.0.4rc1にバージョンアップしたので対応した。やったのはjarを入れ替えただけ。diconファイルの修正はなし。コードに関しては、 対応。 <a href="${f:url("/calendar/")}?y=${f:u(y)}&m=${f:u(m)}">戻る</a> が <s:link href="/calendar/?y=${f:u(y)}&m=${f:u(m)}">戻る</s:link> になる感じ。まぁ、あんまりかわんないかな。ちょ…

ひととおり開発終了

スケジューラ開発完了 スケジューラの作成が完了。機能は ログイン(サーブレットコンテナの認証機能利用) スケジュール閲覧(カレンダービュー) スケジュール作成・修正・削除 パスワード変更 一行掲示板(削除機能付) ログアウト だけのシンプルなもの。そも…

カスタムタグを作る

テキストにURLが含まれていたら、リンクにして表示するカスタムタグを作った。 SAStrutsに含まれるS2Functionsクラスのescapeメソッドを使いたかったのだが、privateメソッドなので継承しても意味ないので断念。まるっとコピーするのもアレな感じがしたので…

例外について(3)

http://d.hatena.ne.jp/n-kizashi/20080801 に書いたインターセプタを改良した。 Actionで意図的に発生させたActionMessagesExceptionもこのインターセプタを通ってしまうことがわかったので。 public class ExceptionLogInterceptor extends ThrowsIntercep…

テキスト入力エリアでのエンターキー問題(IEのみ?)

JSPで <s:form> <html:text property="message" /> <input type="submit" value="入力" name="create" /> </s:form> こう書くと、入力ボタンを押下した際に、Actionのcreateメソッドが呼ばれることになる。なのだが、テキスト入力部でエンターキーを押したときに、サブミットが走るのだが、Actionではcreateメソッドではなくindexメソッドが走ることになる。FireFo…

Order by の desc

S2JDBCは超便利だ。 order byも流れるようなインターフェースで記述できる。ん? でも、DESCってどうやって指定するんだろう? S2JDBCのソースも見てみたが指定するような引数はなさそうだ・・・。だめもとで、 public List<BoardMessage> findMessages() { List<BoardMessage> results =</boardmessage></boardmessage>…

removeActionFormの怪

これは仕様なのかバグなのか。1.0.3からの機能で アクションフォームをセッションに保存している場合、 @ExecuteのremoveActionForm要素をtrueに設定しておくと、実行メソッドの正常終了時にセッションからアクションフォームが削除されます。デフォルトはfa…

例外について(2)

ひがさんのコメントどおり、ThrowsInterceptorを使って実現できた。 public class ExceptionLogInterceptor extends ThrowsInterceptor { private static final long serialVersionUID = 1L; private static Logger logger = Logger.getLogger(ExceptionLogI…

例外について

環境や設定の不備による例外や不具合による例外は、システムエラー画面(ごめんなさい画面)に飛ばすことになる。生strutsだと、とりあえず親玉Actionを作って、実装は全部親玉Actionを継承させた子Actionでする。その親玉Actionでは、子Actionから上がってき…

ActionFormがうまく動かない(解決済み)

1.0.3-rc1からはActionForm推奨になっているので使うことにしている。 カレンダーから「登録済みスケジュール選択(クリック)」→ スケジュール内容確認画面に遷移 確認画面で編集ボタンクリック→編集画面に遷移(もしくは削除ボタンクリック→削除してカレンダ…

SQLファイルを使う 

やろうとしていることは外部SQLファイルを使うまでもなくJdbcManagerのAPIを使えばできるんだけど、何事も勉強ということで試してみた。パラメータは1つなので、あえてDTOでわたすのもアレだなと思っていたら、 SQLファイルのパラメータが1つの場合は、 sele…

SAStruts-1.0.3-rc1にアップグレード

中身の開発は進まないけど、とりあえずアップグレードしておく。 やることは3つ。くわしくはsa-struts-tutorial*1参照。 jarの置き換え FormCreatorコンポーネントの追加(creator.dicon) formCustomizerコンポーネントの追加(customizer.dicon) あとは、ソー…

すすまない。

例のスケジューラの開発が進まない。 JUnit勉強会の資料作成とか、オフショア視察の報告資料作成とかあって進まない。JUnitの資料は、WEB上にいろいろと見つかるのだが、テスト対象のコードサンプルが「引数aと引数bを足した結果を返すメソッド」とかで、な…

TBを受けて

トラックバックをしていただいたコンピュータクワガタさんのページ(http://d.hatena.ne.jp/kuwalab/20080629#1214743342)をみて、コンポーネントの自動or手動登録について、今さらですが、やっとid:koichikさんのコメントが理解できました。まだまだ理解が浅…

開発中の画面

どういうもんをつくろうとおもっているんだとお思いの方に(いねーよ)。 まだ予定データはいってないけど。 掲示板なんてだいぶ先の話。

Interceptorむずかしい2

ひがさんのご指摘どおり、useLookupAdapter を指定してみた。 customizer.dicon の actionCustomizer に <initMethod name="addCustomizer"> <arg> <component class="org.seasar.framework.container.customizer.AspectCustomizer"> <property name="useLookupAdapter">true</property> <property name="interceptorName">"UserDtoAutoRetrieveIn…</property></component></arg></initmethod>

Interceptorむずかしい3(解決編)

id:higayasuoさんのご指摘だけでも感謝なのに、id:koichik さんもコメントにてご指摘をくださった。 Interceptor を dicon に登録してますか? id:koichikさんのコメント そりゃあしてますよ、もちろん。app.diconに <component name="UserDtoAutoRetrieveInterceptor" class="kizashi.scheduler.interceptor.UserDtoAutoRetrieveInterceptor"/> ほらね。*1 SMART deploy で自動登録な</component>…

Interceptorむずかしい

昨日書いた自作のInterceptorはSAStruts内のクラスであるActionMessagesThrowsInterceptorを参考に、ややシンプルにすることができた。ま、requestの取得だけだけど。 public class UserDtoAutoRetrieveInterceptor extends AbstractInterceptor { private s…

やって・・・

今日は恐ろしく眠い。すぐに寝よう。でも「AOPをちょっとやってみた」のと「ToStringBuilder」を使うためCommonsLangを導入した。 自作Interceptor 先に書いたが、JDBCRealmを使っていて、/schedule/* にアクセスされたものは、いったんFORM認証の画面が表示…

やってみようpart6(JDBCRealm)

先に書いたとおり、認証はSAStrutsのサンプルでもあるとおりJ2EEコンテナにまかせることにしました。id:higayasuoさんおすすめらしいです。 テーブルの準備 まず、DBの準備です。ユーザテーブルにはユーザIDとクレデンシャル(パスワード)、ロールテーブルに…