Viewの実装を強要したい

47 views
Skip to first unread message

ひろ

unread,
Jun 3, 2014, 3:22:55 AM6/3/14
to mixe...@googlegroups.com
お世話になっております。

Mixer2XhtmlViewResolverでViewを検索する際、AbstractMixer2XhtmlViewを派生させたViewのクラスが存在しなければエラーとしたいのですが可能でしょうか?


現在はViewが存在しなくてもhtmlを表示できているのですが、Viewの作成処理の後処理でpathAdjusterを実行したいため、必ず

AbstractMixer2XhtmlViewを派生させたViewを用意しています。

ところがミスにより用意し忘れた場合や、名前を微妙に間違えた時でもHTMLが表示されるため、見当違いな調査をしてしまいます。

いっそ、Viewのクラスが無いとエラーを出力してHTMLが表示されなければ間違いに気づきやすいと思いますので、私としてはエラーに出来る方法が欲しいです。
もし既にそのような方法があるのであれば教えてください。

以上、よろしくお願いします。

ひろ

unread,
Jun 3, 2014, 3:28:03 AM6/3/14
to mixe...@googlegroups.com
Mixer2のバージョンは1.2.22
Spring3です。

定義は次のようにしています

<bean id="mixer2Engine" class="org.mixer2.Mixer2Engine" scope="singleton" />
<bean class="org.mixer2.spring.webmvc.Mixer2XhtmlViewResolver">
    <property name="order" value="1" />
    <property name="prefix" value="classpath:m2mockup/m2template/" />
    <property name="suffix" value=".html" />
    <property name="basePackage" value="sample.web.view" />
    <property name="mixer2Engine" ref="mixer2Engine" />
</bean>


2014年6月3日火曜日 16時22分55秒 UTC+9 ひろ:

nabedge

unread,
Jun 3, 2014, 7:49:13 PM6/3/14
to mixe...@googlegroups.com

渡辺です。
現状ままだとむずかしいっすね。
ビュークラスが見当たらない場合には例外をはかせることができる
設定オプションを追加する方向で
考えます。

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

ひろ

unread,
Jun 5, 2014, 12:31:08 AM6/5/14
to mixe...@googlegroups.com
設定オプションを追加して頂けると大変助かります。
よろしくお願いします。


2014年6月4日水曜日 8時49分13秒 UTC+9 nabedge:

nabedge

unread,
Jun 9, 2014, 9:57:42 AM6/9/14
to mixe...@googlegroups.com
渡辺です。
設定オプションを追加したバージョンを1.2-SNAPSHOTとしてリリースしました。
snapshotバージョンの使い方は
http://mixer2.org/site/download.html
です。

Mixer2XhtmlViewResolver のjavadocにあるとおり、
<property name="raiseErrorIfViewClassNotFound" value="true" />
をspring mvcの設定に加えることにより、
テンプレートファイル名に合わせたビュークラスが見つからない場合は
例外が発生するようになります。

2、3日たったら正式版としてリリースします。


2014年6月5日木曜日 13時31分08秒 UTC+9 ひろ:

ひろ

unread,
Jun 10, 2014, 4:47:48 AM6/10/14
to mixe...@googlegroups.com
ご対応ありがとうございます。
単独での使用において期待通りの動作になったことが確認できました。

この動作確認で気づいたのですが、VIEWを検索する場所が複数(例:PACKAGE1.view、PACKAGE2.view、PACKAGE3.view)ある場合、次のようにbeanを定義しorderで検索順を指定すれば良いと思っていました。
今回の修正を入れたせいなのか、そもそも最初からそうなのか不明ですが、order=1だけでVIEWの検索をやめてしまっているように思います。
この例でいえばPACKAGE1.viewでVIEWが見つからなければExceptionを出す(raiseErrorIfViewClassNotFound=true)か、
html(raiseErrorIfViewClassNotFound=false)を表示してしまい、PACKAGE2.view以降を検索していないように思います。

<bean class="org.mixer2.spring.webmvc.Mixer2XhtmlViewResolver">
<property name="order" value="1" />
<property name="prefix" value="classpath:m2mockup/m2template/" />
<property name="suffix" value=".html" />
<property name="basePackage" value="PACKAGE1.view" />
<property name="raiseErrorIfViewClassNotFound" value="false" />
<property name="mixer2Engine" ref="mixer2Engine" />
</bean>

<bean class="org.mixer2.spring.webmvc.Mixer2XhtmlViewResolver">
<property name="order" value="2" />
<property name="prefix" value="classpath:m2mockup/m2template/" />
<property name="suffix" value=".html" />
<property name="basePackage" value="PACKAGE2.view" />
<property name="raiseErrorIfViewClassNotFound" value="false" />
<property name="mixer2Engine" ref="mixer2Engine" />
</bean>

<bean class="org.mixer2.spring.webmvc.Mixer2XhtmlViewResolver">
<property name="order" value="3" />
<property name="prefix" value="classpath:m2mockup/m2template/" />
<property name="suffix" value=".html" />
<property name="basePackage" value="PACKAGE3.view" />
<!-- VIEWが無ければException -->
<property name="raiseErrorIfViewClassNotFound" value="true" />
<property name="mixer2Engine" ref="mixer2Engine" />
</bean>


これを書いていて私の考え方が間違っているような気もしていますが、一応困った問題をそのまま質問させて頂きます。
どうかよろしくお願いします。



2014年6月9日月曜日 22時57分42秒 UTC+9 nabedge:

nabedge

unread,
Jun 10, 2014, 8:00:46 AM6/10/14
to mixe...@googlegroups.com
渡辺です。
SpringMVCにおいて、ViewResolverの羅列とそのorder(順序)は、
異なるビューテクノロジーを同時に扱えるようにするためのものです。
(と、少なくとも自分はそう解釈しています)
つまり、Mixer2XhtmlViewで指定されたviewNameの解決を試みて、
それで解決できなければjspでの表示を試みて、、、のようなorderということです。

残念ながら下のようにMxier2XhtmlViewResolverを複数個用意するような
使い方は想定していません。(mxier2としても、そしておそらくはspringmvcも)

下の設定によってお手元で起きていることは、仕様どおりの動きです。
viewNameに沿ったテンプレートファイルが見つからなければ
次のorderのViewResolverに処理が移譲されますが、
テンプレートファイルが見つかれば、
それを処理するビュークラスを探します。
そこで該当するビュークラスが無い場合はテンプレートファイルを
そのままパースするだけで返します(それがデフォルト動作)が、
raiseErrorIfViewClassNotFoundがオンの場合にはビュークラスが無い場合にClassNotFoundExceptionです。

残念ながら、これ以上はViewResolverを自作することをお勧めします。
ビューリゾルバーとAbstractViewの2本だけですのでそう難しくはありません。



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


2014年6月10日 17:47 ひろ <hiro...@freegw.net>:

ひろ

unread,
Jun 11, 2014, 6:01:35 AM6/11/14
to mixe...@googlegroups.com
ご対応ありがとうございました。
自作を検討してみます。


2014年6月10日火曜日 21時00分46秒 UTC+9 nabedge:
Reply all
Reply to author
Forward
0 new messages