異なるパッケージでViewを派生・共有する方法

43 views
Skip to first unread message

ひろ

unread,
Jan 7, 2014, 8:04:44 PM1/7/14
to mixe...@googlegroups.com
お世話になります。
異なるパッケージ間でViewを使い回す方法について教えてください。
具体的にどういうことをしたいのかというと

【元になるパッケージ:p1】
(1)view1:全パッケージで共通のView。テンプレートのHTMLも全パッケージ共通
(2)view2:全パッケージで共通のView。テンプレートのHTMLは派生させたパッケージで用意
(3)view3:派生したパッケージで変更するため、最低限の機能を持たせたView

【p1を一部変更したパッケージ:p2】
(1)view1:全パッケージで共通のView ※これをp2では作成せず、p1のViewをそのまま使いたい!
(2)view2:全パッケージで共通のView ※これをp2では作成せず、p1のViewをそのまま使いたい!但し、テンプレートとなるHTMLはp2用の物を使用する
(3)view3:p1のview3(Java)を一部変更したView  ※クラスファイルを派生させて作るので問題ない?
(4)view4:p2で独自に実装したView

がある場合に、p2ではp1の変更になったViewのみを作成し、それ以外(p2のview1)はp1のパッケージをそのまま使いたいのです。

Controllerはmvc-dispatcher-servlet.xmlでbeanを個別に指定することで実現できたのですが、Viewは同じ方法が使えませんでした。

「それでは」と、次のようにcomponent-scanを二つ書いてみたのですがViewが同じなのでコンフリクトエラーが発生してしまいます。

   <context:component-scan base-package="p1.web" />
   <context:component-scan base-package="p2.web" />


できれば参照する優先順位をつけて、先に見つけたものから採用するような仕組みがあると嬉しいのですが、無くても、個別に指定する方法でも良いのでやり方を教えてください。

nabedge

unread,
Jan 7, 2014, 8:12:26 PM1/7/14
to mixe...@googlegroups.com

とりあえず、使用しているmixer2とspringMVCのバージョンをおねがいします。

2014/01/08 10:04 "ひろ" <hiro...@freegw.net>:
--
このメールは Google グループのグループ「mixer2-ja」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、mixer2-ja+...@googlegroups.com にメールを送信します。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。

ひろ

unread,
Jan 7, 2014, 8:35:21 PM1/7/14
to mixe...@googlegroups.com
すみません。

spring-framework:3.2.3.RELEASE
mixer2:1.2.20

です。

よろしくお願いします。


2014年1月8日水曜日 10時12分26秒 UTC+9 nabedge:

とりあえず、使用しているmixer2とspringMVCのバージョンをおねがいします。

このグループから退会し、メールの受信を停止するには、mixer2-ja+unsubscribe@googlegroups.com にメールを送信します。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。

nabedge

unread,
Jan 8, 2014, 5:30:14 AM1/8/14
to mixe...@googlegroups.com
渡辺です。

※以下、Mixer2-1.2.22が前提です。1.2.20じゃないです。

「p1のViewをそのまま使いたい!」
「それ以外(p2のview1)はp1のパッケージをそのまま使いたいのです。」
といったことが具体的になんなのかわかりづらいので、やはりできれば
ソースコードとかソースコードツリー構造を添えていただきたいです。
(p1.FooViewの内容をそっくりコピペした、
p2.FooViewクラスが新たに作られているという意味なのだろうか?)


>>> 異なるパッケージ間でViewを使い回す方法について教えてください。

SpringMVC連携のためにMixer2に同梱されているMixer2ViewResolverの動きは
下のような流れになります。

1 ControllerのメソッドがviewName(ビューの名前)として "foo/bar" をStringで返したとする
2 Mixer2ViewResolverは [prefix]/foo/bar.htmlファイルを探す。
 無ければ処理終了
3 Mixer2ViewResolverは [basePackage].foo.BarViewというクラスを探して使う。
 (無ければAbstractMixer2Viewを無名クラスでnewしてそれを使う)

よって、似通った二つのFooViewクラスを作ったとして、

1. Controllerのメソッド1が"p1/foo"を返す
2. [prefix]/p1/foo.htmlと、[basePackage].p1.FooViewとが、
 それぞれテンプレートファイルとviewクラスとして使われる
一方で
1. Controllerのメソッド2が"p2/foo"を返す
2. [prefix]/p2/foo.htmlと、[basePackage].p2.FooViewとが、
 それぞれテンプレートファイルとviewクラスとして使われる
ということになります。

ヒントになれば。
--------
nab...@gmail.com


2014年1月8日 10:35 ひろ <hiro...@freegw.net>:
>>> このグループから退会し、メールの受信を停止するには、mixer2-ja+...@googlegroups.com
>>> にメールを送信します。
>>> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
>
> --
> このメールは Google グループのグループ「mixer2-ja」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、mixer2-ja+...@googlegroups.com にメールを送信します。
> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。

ひろ

unread,
Jan 8, 2014, 7:25:22 AM1/8/14
to mixe...@googlegroups.com
説明が分かりにくくて申し訳ありません。

次のようなことを考えています。

1.基本となるパッケージとしてP1を作る。
(1)DAOやView、Controller等、一通り揃える
(2)ユーザ管理機能やショッピングカート等の業務ロジックも可能な限り実装する。
(3)P1は随時必要な機能を追加していく

2.顧客A向けサイト、顧客B向けサイト、のように、大まかな機能は同じだが異なるサイト向けにP1をカスタマイズしてP2を作る。
(1)ユーザ管理機能等の、どのサイトでも同じ部分はP1をそのまま使いたい。(P1はJARで提供する)
(2)顧客が増えるごとにP1に実装する機能が増えることを想定しているので、P2を作る際はなるべくP1に実装するものはコピーしたくない。(P1に機能を追加したら定義ファイルの変更程度でP2にも機能が追加されるようにしたい)


※今回の要望はこの部分です。コントローラーはP2の定義に
    <bean id="guestController" class="p1.web.controller.SuperGuestController" scope="prototype" /> ←p1のコントローラークラス
と書けば良かったのですが、同じことをVIEWでもやりたいです。

※たとえばユーザ管理機能はどのサイトでも同じものが使えるので、HTMLもP1のファイルを参照させたいです。P1用のJARにHTMLソースも同梱して、必要なものはそこから取り出すようにできないものかと考えています。

※説明が下手ですがイメージが伝わりましたでしょうか?パッケージを見て頂くのが一番早いと思うのですが、かなりの大きさになってしまうので添付できません。

よろしくお願いします。





2014年1月8日水曜日 10時04分44秒 UTC+9 ひろ:

nabedge

unread,
Jan 8, 2014, 9:10:13 AM1/8/14
to mixe...@googlegroups.com
渡辺です。
残念ながらMixer2のSpringMVC連携機能でカバーしうる範囲を超えていると思います。
Mixer2ViewResolverの使用はやめて、独自のviewクラスを実装し、
コントローラのメソッドはビュー名をstringで返すのではなくviewオブジェクトを返すように
してはいかがでしょうか。
この先はMixer2ではなくspringMVCの使い方の話になるのでこのへんで。

--------
nab...@gmail.com


2014年1月8日 21:25 ひろ <hiro...@freegw.net>:

ひろ

unread,
Jan 8, 2014, 7:57:18 PM1/8/14
to mixe...@googlegroups.com
ひろです。
コントローラーからView名をStringで返していましたが、viewオブジェクトを返すことにすれば
確かに私の考えていることができそうです。
アドバイスありがとうございます。

2014年1月8日水曜日 23時10分13秒 UTC+9 nabedge:
> このグループから退会し、メールの受信を停止するには、mixer2-ja+unsubscribe@googlegroups.com にメールを送信します。
> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
Reply all
Reply to author
Forward
0 new messages