Entering Passive Mode

カテゴリ 'Java' の記事
< 1 2 3 4 5 6 7 8... >

複数の送信ボタン

そろそろ次のステップに移るか。

次に着手するのが、一覧画面のルール管理用フォームだ。
このフォームは今までのものと少し違う。

従来のフォームは、特定の Bean の内容を編集するものであり、
フォームの項目は Bean のプロパティに対応している。
イメージとしては、プロパティダイアログボックスで、
内容を編集後、OK ボタンを押して内容を更新する。

ルール管理用のフォームは、Bean 一覧の管理を行うものであり、
フォームの項目に入力項目は少なく、ほとんどがボタンである。
イメージとしては、コレクション一覧表示のウィンドウで、
各種ボタンを使って並べ替えや移動・追加・削除を行う。

検証にメッセージリソースを使う

メッセージリソースを使いだしたので、
検証エラーのメッセージにもリソースを使ってみよう。

現在メッセージは ActionForm に直接記述しているので、
このままでは多言語化することはできない。
そのため、メッセージをプロパティファイルに移し、
それを参照するような形に修正する。

========== Messages_ja.properties ==========
# エラーメッセージ

一覧画面にメッセージリソースを使う

<message-resources> で登録したメッセージリソースは、
Bean タグライブラリの <bean:message> で取り出して使う。

メッセージリソースのキーを指定する方法は 2 つある。
1 つは、key 属性を使って直接キー文字列を指定する方法、
もう 1 つは、name 属性や property 属性を使って、
スコープ属性に登録してある Bean 値を読み取り、
その値をキーとして間接的に使う方法である。

list.jsp の既定の処理の値は、
リクエスト属性「filter」に登録されている Bean の、
「info.defaultAction」プロパティから取得でき、
その値は、「allow」か「deny」である。

メッセージリソースの用意

設定画面

メッセージリソースを使うためには、
まず properties ファイルを作成する必要がある。

jp.loafer.test.resources パッケージに置くことにしよう。

まずは、基準となるプロパティファイル。
これにはデフォルトとして英語で記述することにする。
もちろん、ここに日本語を書いても良いのだが、
その場合、どのロケールでも日本語となってしまう。

========== Messages.properties  ==========
value.action.allow = Allow
value.action.deny = Deny
========== end of Messages.properties ==========

Struts のメッセージリソース

一覧表示のページである、list.jsp の出力を見てみると、
既定の処理が「deny」や「allow」などの英語表記である。
FormBean の値を、<bean:write> で直接出力しているからだ。

GUI の設計を考えると、ここは「許可」や「拒否」など、
日本語で表示しておくのが好ましい。

これを実現するためには、<bean:write> で書くのではなく、
値を調べて日本語に変換するコードを書く必要がある。
これを、直接 JSP の条件分岐で書いても良いのだが、
折角なので、メッセージリソースを使う事を考えてみよう。

キャンセルと検証を組み合わせる

エラーメッセージ

キャンセルに対応したので、ついでに検証を実装し、
キャンセルが検証コードを回避することを確認してみよう。
ま、自分の復習のためってことで。

検証を行うためには、以下のような修正が必要となる。

1. ActionrForm#validate の実装
2. Struts 設定ファイルの <action> へ input 属性を追加
3. 検証エラーを表示する JSP に、専用のタグを追加

まず、FilterInfoForm#validate を実装する。

キャンセル処理

日本語の問題が解決したので、次のステップに移る。
今日は、キャンセル処理について。

/WEB-INF/pages/filter/edit-info.jsp では、
タグライブラリの <html:cancel> を使って、
キャンセル用のボタンを配置しているが、
これを押すと、InvalidCancelException 例外が発生する。
まず、これを直さなければならない。

何故 <html:cancel> を配置するだけで例外が発生するのか。

Command を登録して使ってみる

ComposableRequestProcessor で処理する Command は、
設定ファイルによって登録されている。
org.apache.struts.chain.chain-config.xml がそれだ。

chain-config.xml を読んでみるとかなり巨大な内容だが、
Struts はこれを簡単に拡張できるように考慮しており、
別にチェインの設定の XML ファイルを作るだけで、
簡単にユーザ定義コマンドを追加することができる。

ということで、まずは /WEB-INF/chain-config.xml を作る。

Command: Chain of Responsibility の基盤

Struts のコアは、RequestProcessor というクラスである。
Struts 1.3.5 においては、このクラスは拡張され、
org.apache.struts.chain パッケージにある、
ComposableRequestProcessor がその実態を担当している。

Struts で行われる処理は、小さな単位に分割され、
それらは個々のコマンドクラスとして実装されている。
ComposableRequestProcessor は上記クラスを管理しており、
デザインパターンの Chain of Responsibility を元に、
コマンドを順番に呼び出すことで処理を行っている。

Filter を登録して使ってみる

設定画面

Filter は Servlet と同様、web.xml に登録して使う。

登録の方法も非常によく似ており、
<web-app> 要素の子要素として <filter> 要素と、
<filter-mapping> 要素を追加することで登録する。

    <!-- フィルタを定義 -->
    <filter>
        <filter-name>utf8-request</filter-name>
        <filter-class>
            jp.loafer.test.filters.SetUTF8Request
        </filter-class>
    </filter>
   
    <!-- フィルタの適用先を定義 -->
    <filter-mapping>
        <filter-name>utf8-request</filter-name>
        <servlet-name>struts</servlet-name>
    </filter-mapping>

< 1 2 3 4 5 6 7 8... >
このページのトップへ戻る
© 2008 Project Loafer/Project Fireball and all blog writers. Powered by Nucleus CMS