6

次のようなものを含む例を見てきました。

mountSharedResource("/images/logo.gif", new ResourceReference(ImageScope.class,
  "logo.gif").getSharedResourceKey());

mountSharedResource("/resource",
  Application.class.getName() + "/" + resourceKey);

しかし、Javadoc はコンストラクターについて次のように述べています。

ResourceReference(java.lang.Class<?> scope, java.lang.String name);

したがって、 を作成するときはResourceReference、クラスを指定します。なんで?通常、作成したばかりのオブジェクトのグローバル スコープまたはスコープのいずれかが必要ですResourceReferenceよね?

また、何nameですか?ですかsharedResourceKey?そうでない場合、はresourceKeyどこから来たのですか?それはどのように生成され、なぜ名前ではないのですか? またはname、クラスパスで検索され、魔法のようにロードされます (クラスパスにその名前のファイルが 1 つしかないと仮定します。複数ある場合はどうなりますか?)? その名前のファイルをロードする場合、Javadoc でそう言わないのはなぜですか?

実際にこれに物理リソースをどのように割り当てますResourceReferenceか? ありますが、getResource()見逃しているようですsetResource()。たとえば、ディレクトリに画像ファイルがある場合webapp、ファイルへの参照、そのパス、またはファイルの内容のバイトストリームをどのように「添付」しますか? Web アプリケーションでリソースを読み取る方法があれば、これは便利かもしれませんが、できません。それはクラスパスにのみあります。

たとえば、コンテンツを「マウント」してwebapp/games/someGame.swf、Web アプリケーションの SWF に Wicket ページからアクセスできるようにしたり、何らかのハンドルを取得したりできるようにしたいと考えています。

4

2 に答える 2

10

画像などのリソースは、通常、特定の Web ページに関連付けられています。そのため、その画像を Java および HTML ファイルと同じ場所に配置することは理にかなっています。

クラス パラメータは、リソースを検索するベースとして機能します。ResourceReference コンストラクターの 2 番目のパラメーターは、クラスを含むディレクトリに相対的なリソースの名前です。

たとえば、次のようにすることができます-

new ResourceReference(AClass.class, "sub/directory/image.jpg");

アプリケーションのデプロイ時に物理リソースを適切なディレクトリに配置するだけで、物理リソースを割り当てることができます。

「Wicket in Action」という本の中にリソースの使用に関する章があります。

于 2011-07-14T08:36:24.890 に答える
3

アンドリューの答えを拡張するには:

ResourceReference自体は、を通じて利用可能なリソースへの参照に他なりSharedResourcesません。追加ResourceするSharedResources(通常は で行うApplication#init()) には、定義した名前があります。リソースを使用するすべてのユーザーは、その名前Componentの を介してこの共有リソースを参照できResourceReferenceます。したがって、パラメーターは「name」と呼ばれます。この場合、スコープ パラメータ (クラス) は必要ありません。

これは、あらゆる種類のリソースを参照する一般的なケースです。

あなたとアンドリューの例に示されているケースは、より特殊なケースです。あなたResourceReferenceのは、以前に追加されnameた を参照していません。ここでは、いわゆる aが遅延して初期化され、 に追加されます。ResourceSharedResourcesPackageResourceSharedResources

PackageResource「クラスパスからのファイルのロード」全体を実際に行うものです。

したがって、クラスパスから画像のようなファイルを参照するだけの場合、Andrew の例は、PackageResource自分で作成することを避けるための非常に便利なショートカットです。上記のように、それResourceReferenceだけではありません:-)

于 2011-08-11T11:51:39.310 に答える