- 存在しないフィーチャーやコマンドをリクエストするとNullPointerExceptionが発生するバグを修正
- POSTメソッドでhttpsへリダイレクトするとパラメータが渡らないバグを修正
- Fetchの結果をキャッシュする際、Fetchへのパラメータの違いを無視していたバグを修正
- output要素のscope属性を無視していたバグを修正
- fetchの設定で、指定クラスがFetcherインターフェイスを実装しているかどうかをチェックするようにした
- validation要素のtype属性が規定外の値だったときにValidationConfig#getValidatorInstance()メソッドがNullPointerExceptionをスローしていた問題を修正
News
2006/6/13 - バージョン2.0.0 正式リリース
2006/5/18 - 2.0-beta-2006_0518 リリース
- Beanやアクションの出力に新しいスコープ"local"を追加
- コマンドの出力先スコープを選択できるようにした
- forwardで無限ループするバグを修正
- リダイレクトで複数の値を持つパラメータが正常に受け渡せないバグを修正
- Form API: 名前を共有するチェックボックスに正しく値が入らないバグの修正
- Form API: select要素のmultiple属性を無視していたバグを修正
- Form API: テキストエリアに値が入らないバグの修正
- http/httpsの自動切り替えを実装
- fetchのキャッシュを実装
- shift_jis, windows-31j間の変換で文字化けしないようにした
- レスポンスのCache-Controlヘッダをコントロールする機能を追加
- ファイルのダウンロードをサポート
2006/4/26 - 2.0-alpha-2006_0426 リリース
2.0の新機能
- コマンドをアクションコンポーネントのチェーンで構成できるようにした
- 各コンポーネントへの値の入力にDIを採用し、コンポーネント間の依存性を低くした
- バリデーションの仕組みの導入
- ファイルアップロードを簡単に扱えるようにした
その他の変更
- 設定ファイルをロードするためのライブラリをJiBXからDigesterに戻した
- DigesterのルールをXMLで定義した
featについて
featはwebアプリケーションのためのフレームワークです。プログラムのようなXMLを書かされることもなく、HTMLに難解な記述を混入させてデザインの修正を妨げたりすることもありません。
featは、アプリケーションを極力Javaのコードで書くように設計されています。ただしポータビリティを向上させるためにXMLの設定ファイルも使います。
テンプレートエンジンは純粋なHTMLを使うように設計されています。JSPやほかのテンプレートエンジンは独自のタグや記述をHTMLに埋め込んでしまうため、デザインの修正が困難になります。featではHTMLのドキュメントツリーから要素を検索して書き換えることで動的なドキュメントを生成します。DOMに生でアクセスするような面倒を排除するため、便利なテンプレートAPIを用意しています。
HelloWorldの例です。この程度の単純なものならアクションコンポーネントを省略してしまうこともできます。
アプリケーションの設定ファイル (feat-config.xml)
<?xml version="1.0" ?>
<!DOCTYPE feat PUBLIC "-//feat//DTD feat-config//EN" "feat-config.dtd"> <feat> <feature config="examples.xml" template="WEB-INF/templates/examples/" /> </feat>
フィーチャーの設定ファイル (examples.xml)
<?xml version="1.0" ?>
<!DOCTYPE feature PUBLIC "-//feat//DTD feature-config//EN" "feature-config.dtd"> <feature name="examples" package="examples"> <command name="hello"> <!-- アクションコンポーネントを省略 --> <output name="default" response="helloView" /> </command> <page name="helloView" template="hello.html"> <view class="MessageView"> <input-literal property="message">こんにちは</input-literal> </view> </page> </feature>
ビュー (MessageView.java)
package examples; import feat2.CommandContext; import feat2.View; import feat2.config.ViewConfig; import feat2.template.HTMLDocument; public class MessageView implements View { private String message; public HTMLDocument format( HTMLDocument template, ViewConfig cfg, CommandContext ctx) throws Exception { template.findElement("message").setText(message); return template; } public void setMessage(String message) { this.message = message; } }
テンプレート (hello.html)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=Shift_JIS"> <title>タイトル</title> </head> <body> <p id="message"> </body> </html>
To Do
pageに別のコマンドの実行結果をincludeできるようにする(2.1)
inputのデフォルト値(2.1)
userコンテクスト(2.1)
フィーチャーを任意のパス(URI)に関連付けられるようにする(2.1)
テンプレートのfast treeを実装する (2.1)
開発のベースをJava5.0に移行(3.0)
アノテーションを使ったバリデータ (3.0)
XHTMLテンプレートに対応(3.0)
設定ファイルの読み込みをJAXBに変更(3.0)