org.mixer2.spring.webmvc.AbstractMixer2XhtmlViewのcreateHtmlメソッド

39 views
Skip to first unread message

ひろ

unread,
Nov 26, 2014, 8:39:48 PM11/26/14
to mixe...@googlegroups.com
お世話になります。

org.mixer2.spring.webmvc.AbstractMixer2XhtmlViewでcreateHtmlメソッドに相当するものは無いのでしょうか?
org.mixer2.springmvc.AbstractMixer2XhtmlViewは@Deprecatedなのでwebmvcの方を使っていたのですが、HtmlをcreateHtmlメソッドで自分で作成する必要が出てきたのでcreateHtmlメソッド相当が欲しいのですが・・・

nabedge

unread,
Nov 26, 2014, 11:53:59 PM11/26/14
to mixe...@googlegroups.com
渡辺です。
あるか無いかでいうと、現状、無い、としか言えないっす。

https://github.com/nabedge/mixer2/blob/mixer2-1.2.34/src/main/java/org/mixer2/spring/webmvc/AbstractMixer2XhtmlView.java#L160
↑このrenderHtmlメソッドが、createHtmlに相当しますよ、と言おうと思ったら、微妙に引数が違いますねこれ、、、。

http://mixer2.org/site/ja/springmvc.html
↑ここの一番下のほうに書いたとおり、htmlテンプレートファイル
の存在は必須→ビューリゾルバが必ずそれを探してloadHtmlTemplate()しておく、
という仕様にしたのが、裏目に出たかもしれません。

下位互換性を失わせてしまったのは申し訳ないので
mixer2側でなんとかしたいのですが、どういうふうにするのがベストでしょうか?


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


2014年11月27日 10:39 ひろ <hiro...@freegw.net>:
> お世話になります。
>
> org.mixer2.spring.webmvc.AbstractMixer2XhtmlViewでcreateHtmlメソッドに相当するものは無いのでしょうか?
> org.mixer2.springmvc.AbstractMixer2XhtmlViewは@Deprecatedなのでwebmvcの方を使っていたのですが、HtmlをcreateHtmlメソッドで自分で作成する必要が出てきたのでcreateHtmlメソッド相当が欲しいのですが・・・
>
> --
> このメールは Google グループのグループ「mixer2-ja」に登録しているユーザーに送られています。
> このグループから退会し、グループからのメールの配信を停止するには mixer2-ja+...@googlegroups.com
> にメールを送信してください。
> その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

ひろ

unread,
Nov 27, 2014, 1:39:30 AM11/27/14
to mixe...@googlegroups.com
渡辺さん

createHtmlを使いたくなったのはローカライズとマルチランゲージ対応のためです。
国別に見せるページのフォーマットが違ったり、同じページでも表示言語を変える、という仕様です。
マルチランゲージはApache的なやり方で、もしかしたらSpringの機能にあるかも知れませんが、ローカライズの方は無いと思うので、ゼロから実装しようかなと。
ローカライズ・マルチランゲージでHTMLファイルを複数用意して自分で読み込むようにしたいのです。

createHtmlメソッドを復活させて頂くのが良いかと思いますが如何でしょうか?

本件に絡み、beanの定義をユーザが拡張できるようにして頂けると助かるのですが可能でしょうか?
現在は定義1ように定義していますが、これを定義2のように書いて、<localize>に書かれた値を取得したいです。
今はプロパティファイルを用意して実現しようと思っていますが、Mixer2の定義に纏められると管理が楽になるので助かります。

【定義1】
<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="xxx.web.view" />
    <property name="mixer2Engine" ref="mixer2Engine" />
    <property name="raiseErrorIfViewClassNotFound" value="true" />
</bean>


【定義2】
<bean class="org.mixer2.spring.webmvc.Mixer2XhtmlViewResolver">
    <property name="order" value="1" />
    <property name="prefix" value="classpath:m2mockup/m2template/" />
    <property name="suffix" value=".html" />
    <localize>
        <locale>
            <property name="locale" value="JP" />
            <property name="lang" value="ja,en" />
            <property name="default" value="ja" />
            <property name="prefix" value="classpath:m2mockup/m2template/JP" />
        </locale>
        <locale>
            <property name="locale" value="EN" />
            <property name="lang" value="en" />
            <property name="prefix" value="classpath:m2mockup/m2template/EN" />
        </locale>
        <locale>
            <property name="locale" value="CN" />
            <property name="lang" value="zh,en" />
            <property name="default" value="zh" />
            <property name="prefix" value="classpath:m2mockup/m2template/CN" />
        </locale>
    </localize>
    <property name="basePackage" value="xxx.web.view" />
    <property name="mixer2Engine" ref="mixer2Engine" />
    <property name="raiseErrorIfViewClassNotFound" value="true" />
</bean>


2014年11月27日木曜日 13時53分59秒 UTC+9 nabedge:

nabedge

unread,
Nov 27, 2014, 4:53:06 AM11/27/14
to mixe...@googlegroups.com
渡辺です。

createHtmlメソッドを復活させる...うーん、すいません、単純な復活だとうまく動かないだけのような気が、、、。
いまちょっと時間が無いので週末にでもゆっくり考えさせてください。
(できればmixer2をforkしてcreateHtml()を作り、それをプルリクエストいただけるとありがたいです。)


ところで。
マルチランゲージ対応ですか、なるほど。
だとすると、
https://github.com/nabedge/mixer2/blob/mixer2-1.2.34/src/main/java/org/mixer2/spring/webmvc/Mixer2XhtmlViewResolver.java#L176
ここで、いまはLocale変数をシカトして、コントローラから返されたビュー名からテンプレートファイルのありかを
割り出してしまっている(好ましいとは言えない状態です)のを治すのが、将来的に見て、良策と思われます。

1) Mixer2XhtmlViewResolverをextendsした新たなリゾルバを作り、
2) そこではこのcanHandleメソッド(と、その中で使われているcreateUrlメソッドも、かも)をオーバーライドして
3) Localeの中身とviewNameの両方の情報をもとにテンプレートファイルを割り出すようにする
っていう手法のほうがいいんじゃないでしょうか。

SpringMVCでのLocaleの使い方に関しては適当にググるといくつか方法が見つかると思います。

とりいそぎ。

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


2014年11月27日 15:39 ひろ <hiro...@freegw.net>:

ひろ

unread,
Nov 27, 2014, 6:16:23 AM11/27/14
to mixe...@googlegroups.com
createHtmlメソッドを復活させる...うーん、すいません、単純な復活だとうまく動かないだけのような気が、、、。
いまちょっと時間が無いので週末にでもゆっくり考えさせてください。
(できればmixer2をforkしてcreateHtml()を作り、それをプルリクエストいただけるとありがたいです。)


申し訳ありません。
私では力不足でプルリクエストはできないと思います。
お時間のある時で結構ですのでよろしくお願いします。

あと、定義の拡張についてもご検討をお願いします。

先程コメントした後で気づいたのですが、
<devices>
    <device>
        <property name="name" value="PC" /><!-- パソコン -->
        <localize>
            <locale><!-- 日本向け -->
                <property name="locale" value="JP" />
                <property name="lang" value="ja,en" />
                <property name="default" value="ja" />
                <property name="prefix" value="classpath:m2mockup/m2template/PC/JP" />
            </locale>
            <locale><!-- アメリカ向け -->
                <property name="locale" value="EN" />
                <property name="lang" value="en" />
                <property name="prefix" value="classpath:m2mockup/m2template/PC/EN" />
            </locale>
            <locale><!-- 中国向け -->
                <property name="locale" value="CN" />
                <property name="lang" value="zh,en" />
                <property name="default" value="zh" />
                <property name="prefix" value="classpath:m2mockup/m2template/PC/CN" />
            </locale>
        </localize>
    </device>
    <device>
        <property name="name" value="TB" /><!-- タブレット -->
        <localize>
            <locale><!-- 日本向け -->
                <property name="locale" value="JP" />
                <property name="lang" value="ja,en" />
                <property name="default" value="ja" />
                <property name="prefix" value="classpath:m2mockup/m2template/TB/JP" />
            </locale>
        </localize>
    </device>
    <device>
        <property name="name" value="SP" /><!-- スマート・フォン -->
        <localize>
            <locale><!-- 日本向け -->
                <property name="locale" value="JP" />
                <property name="lang" value="ja,en" />
                <property name="default" value="ja" />
                <property name="prefix" value="classpath:m2mockup/m2template/SP/JP" />
            </locale>
        </localize>
    </device>
    <device>
        <property name="name" value="FP" /><!-- フィーチャー・フォン -->
        <localize>
            <locale><!-- 日本向け -->
                <property name="locale" value="JP" />
                <property name="lang" value="ja,en" />
                <property name="default" value="ja" />
                <property name="prefix" value="classpath:m2mockup/m2template/FP/JP" />
            </locale>
        </localize>
    </device>
</devices>

のように、拡張できると尚助かります。

 

ところで。
マルチランゲージ対応ですか、なるほど。
だとすると、
https://github.com/nabedge/mixer2/blob/mixer2-1.2.34/src/main/java/org/mixer2/spring/webmvc/Mixer2XhtmlViewResolver.java#L176
ここで、いまはLocale変数をシカトして、コントローラから返されたビュー名からテンプレートファイルのありかを
割り出してしまっている(好ましいとは言えない状態です)のを治すのが、将来的に見て、良策と思われます。

1) Mixer2XhtmlViewResolverをextendsした新たなリゾルバを作り、
2) そこではこのcanHandleメソッド(と、その中で使われているcreateUrlメソッドも、かも)をオーバーライドして
3) Localeの中身とviewNameの両方の情報をもとにテンプレートファイルを割り出すようにする
っていう手法のほうがいいんじゃないでしょうか。

ここで困ることが一点あります。
私は<property name="raiseErrorIfViewClassNotFound" value="true" />でVIEWの実装を強要しているのですが、その理由はPathAdjusterを必ず実行したいからです。
そのため、ページの数が増えるとそれに比例してVIEWも増えてしまいます。
PathAdjusterを実行するスーパークラスを作っているので派生させているだけなのですが、なるべくソースファイルの数も減らしたいので、VIEWの中からテンプレートを決めるようにしたかったのです。
ログ等の取得はコントローラーで対応できたとしても、PathAdjusterはVIEWでしか対応できないのでそうしています。
本当はMixer2が自動的に探してくれるVIEWから後始末なりの利用者処理を呼び出してくれる仕掛けがあるともしかしたらVIEWは作成しなくても済むかも知れません。。。

リゾルバで対応するというのはVIEWが増えてしまうことを意味すると思いますが必ずしもそうはならない方法がありますでしょうか?

Localeの使い方に関して、メッセージファイルの方は言語ファイルを作って対応していますが、HTMLファイルの方はこれから調べてみます。
Reply all
Reply to author
Forward
0 new messages