2012-01-13 1 views
0

...ダイナミックフィールドおよび/または人工方法

Dataset dataset = new Dataset(); 
dataset.setAttribute("name", "value"); 

...後で回復のためにこのように...

String value = dataset.getAttribute("name"); 

...それは私の目的のために素晴らしく働いています。しかし、私はテンプレートエンジンを使ってHTMLを動的に生成したいところです。テンプレートでは、${dataset.getAttribute("name")}をたくさんするのは理想的ではありません。 Datasetに何かが追加されたときに人工的な方法を作り出せればいいと思う。私はこれをしなかった場合たとえば、...

dataset.setAttribute("name", "value"); 

...私は...このようにそれを取得できるようにするには、これまで

String name; 
name = dataset.name; 
//or 
name = dataset.getName(); 

...しかし、私の避難所を希望しますそれを取り除くことができた。私はここにどのようなアプローチをとることができますかそれは可能ですか?

編集:

私は速度がdataset.get("name")dataset.nameを解決しようとするProperty Lookup Rulesを提供することを理解し、それは素晴らしいことだが、私はベロシティがない場合にはこれを実現する方法を知っておく必要がありますも同様です。

答えて

0

ダイナミックスプリングプロキシは、AOPテクノロジまたはCGLibプロキシで使用できます。 execution(public * com.bla.YourClass.get*())")

+0

「データセット」は、(潜在的に)数百ものインスタンスが浮かんでいるクラスであり、すべてが完全に異なる属性セットとは無関係です。 –

0

これまで、私はObjectwebのASMでPOJOを動的に生成していました。これは、基礎となる分野は、(ESP privative値のために)安全ではるかに効率的なタイプであるという利点を有する

1

あなたの方法をget(String attribute)ではなくgetAttribute(String attribute)指名された場合は、通常の場合と同じ構文を使用することができhttp://velocity.apache.org/engine/releases/velocity-1.5/user-guide.html#propertylookuprules

を参照してください。プロパティ。したがって、あなたのクラスをリファクタリングするか、またはgetAttributeと同じことを行うgetメソッドを追加するか、オブジェクトをgetメソッドを持つMapに変換します。

+0

Velocityのこの機能は高く評価されていますが、Velocityは含まれていません。 –

+0

次に、その他の回答を参照するか、実際に型付きでカプセル化されたリファクタリング可能なJavaオブジェクトを使用してください。 –

0

私が見てきたものから、それはフォームgetAttribute、およびMapインタフェース の

  • 実装の両方

    • ゲッター/セッターをサポートするために、Java用テンプレートエンジンのためにかなり一般的です

      より一般的な解決策を探すのに時間を費やす前に(上記はVelocityのようにサポートされないと仮定して)、他のエンジンを見て、それがサポートされていないかどうかを調べる価値があります。すべての可能なターゲットがしたら、あなたはおそらくそれに頼っているでしょう。

      私はあなたが実際にそれを解決するために時間を費やす前に実際に問題があることを確認するのが大好きです。

  • 関連する問題