2011-06-29 7 views
1

これが可能かどうかわかりませんが、Spring MVCで奇妙なバインディングを行う必要があります。我々は、いくつかのレポートを実行する前兆となるページを動的に生成する必要があります。異なるレポートには異なる基準があり、利用可能な場合、レポートに表示されるデータが制限されます。Spring MVCバインド

私はこのような何かを行うことができますことを期待していた:

public interface ReportingStrategy extends Serializable { 
    public String getReportingCriteria(); //Each subclass will generate the SQL needed 
} 

public class DateLimitingStrategy implements ReportingStrategy { 

    private Date startDate; 
    public Date getStartDate() { return startDate; } 
    public void setStartDate(Date startDate) { this.startDate = startDate; } 

    private Date endDate; 
    public Date getEndDate() { return endDate; } 
    public void setEndDate(Date endDate) { this.endDate = endDate; } 

    public String getReportingCriteria() { 
     //Generate SQL for date range (where necessary) 
    } 
} 

public class SortingStrategy impelements ReportingStrategy { 
    public String sortValue; 
    public String getSortValue() { return this.sortValue; } 
    public void setSortValue(String sortValue) { this.sortValue = sortValue; } 
} 

だからそれはかなりシンプルなアイデアのように思えます。

私のコントローラ側では、これらの投稿のリストに投稿することができます。私はこれを必要とするはずのHTMLを生成することができますが、バインディングが正しく機能していません。私のコントローラの基礎は次のとおりです:

PropertyEditorSupportを拡張してInitBinderマジックを実行することによっても可能ですか?

+0

ページが読み込まれた時点でレポート戦略の種類がわかっているのか、ユーザーがレポート戦略を選択していますか? – Affe

+0

レポートAは日付限定戦略を持ち、レポートBは両方を持つ可能性があるので、彼らは知られています。 BackingObjectのコンストラクタは、それらをDB内で検索します(図示せず) – Scott

答えて

1

遠く離れた最も簡単なことは、@SessionAttributesを使用してバッキングオブジェクトをセッションに置くことです。このようにして、バインド時にコンクリート型が存在します。バインダーは、使用するReportingStrategyの実装者が何であるかを把握する必要はありません。すでにバインダーが使用されています。サーバ側の状態は当然の問題かもしれません.Webflowを使わずに未使用のMVCを使用していて、アプリケーションがマルチタブでの使用をサポートしている場合は、いつものようにそれを処理する必要があります。