パスは違うがファイル名が同じ場合のVIEWクラスの定義方法

1,322 views
Skip to first unread message

ひろ

unread,
Nov 21, 2014, 2:46:10 AM11/21/14
to mixe...@googlegroups.com
お世話になります。

パスは違うがファイル名が同じ場合のVIEWクラスの定義方法を教えてください。

例えば/index.html と /members/index.htmlのようなケースです。
どうしてもやり方が分からなかったので下記のケース4のように対応していますが、ファイル名が冗長になってしまうので/members/index.htmlにしたいです。

よろしくお願いします。



【RootController.java】/index.html用
@Controller
public class MembersController{
@RequestMapping(value = "/index")
public String index(Locale locale, Model model, Principal principal) {
String view = "index";
return view;
}
}

【MembersController.java】/members/index.html用
@Controller
@RequestMapping(value = "/members")
public class MembersController {
@RequestMapping(value = "/index")
public String index(Locale locale, Model model, Principal principal) {
String view = "members/index";
return view;
}
}

ケース1:packageを変える→ConflictingBeanDefinitionException
【IndexView.java】/index.html用
package web.view
@Component
@Scope("prototype")
public abstract class IndexView extends AbstractMixer2XhtmlView {
}

【MembersIndexView.java】/members/index.html用
package web.view.members
@Component
@Scope("prototype")
public abstract class IndexView extends AbstractMixer2XhtmlView {
}

この場合は
「Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'indexView' for bean class [web.view.members.IndexView] conflicts with existing, non-compatible bean definition of same name and class [web.view.IndexView]」となります。



ケース2:クラス名を変える→ClassNotFoundException
【MembersIndexView.java】/members/index.html用
package web.view
@Component
@Scope("prototype")
public abstract class MembersIndexView extends AbstractMixer2XhtmlView {
}

この場合は
「java.lang.ClassNotFoundException: web.view.members.IndexView]」となります。


ケース3:クラス名とpackageを変える→ClassNotFoundException
【MembersIndexView.java】/members/index.html用
package web.view.members
@Component
@Scope("prototype")
public abstract class MembersIndexView extends AbstractMixer2XhtmlView {
}

この場合も「java.lang.ClassNotFoundException: web.view.members.IndexView]」となります。


ケース4:/members/index.htmlのファイル名を変える(/members/membersIndex.html)→成功
【MembersController.java】/members/index.html用
@Controller
@RequestMapping(value = "/members")
public class MembersController {
@RequestMapping(value = "/index")
public String index(Locale locale, Model model, Principal principal) {
String view = "members/membersIndex";
return view;
}
}

【MembersIndexView.java】/members/membersIndex.html用
package web.view.members
@Component
@Scope("prototype")
public abstract class MembersIndexView extends AbstractMixer2XhtmlView {
}





nabedge

unread,
Nov 21, 2014, 5:27:17 AM11/21/14
to mixe...@googlegroups.com
渡辺です。
そもそも、
 @Component
 @Scope("prototype")
この2つのアノテーション、不要です。Mixer2ViewResolverがよしなにviewクラスのインスタンスを生成するためです。
ごく初期の頃につくったサンプルコードで、こういうアノテーションをうっかりつけてしまったものがあるので、
ひろさんがそれを参考にしてしまったかもしれません。すいません。

少なくとも@Componentアノテーションはずして試してみていただけますか?(これがConflictingBeanDefinitionException: の主原因と思われるため)


2014年11月21日金曜日 16時46分10秒 UTC+9 ひろ:

ひろ

unread,
Nov 21, 2014, 5:51:30 AM11/21/14
to mixe...@googlegroups.com
ありがとうございます。
@Componentアノテーションを外したらあっさり期待通りの結果になりました。

ずっと悩んでいた日々が・・(笑)

2014年11月21日金曜日 19時27分17秒 UTC+9 nabedge:

nabedge

unread,
Nov 21, 2014, 10:13:20 PM11/21/14
to mixe...@googlegroups.com

たまに、公式サイトのマニュアルや
github.com/nabedge/mixer2-sample
の日付の新しそうなサンプルをざっと見ていただけると
お役にたてるかもしれません

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

ひろ

unread,
Dec 5, 2014, 12:40:30 AM12/5/14
to mixe...@googlegroups.com

mixer2とSpringMVCで作るマルチリンガルサイト


この方式良いですね!

こちらにも書いてありましたが日本語は書いてあるけど英語がないってことよくあります。
なので一つのファイルに日本語と英語の両方が書いてあるのは便利だと思います。

実行すればどちらかしか表示されないので良いのですがデザイン中はデザインが崩れてしまうのでデザイナーは嫌がるでしょうね。
簡単なページなら絶対採用したいですが、複雑なサイトでデザイナーと分業だとちょっと採用しにくいです。
実行しなくても日本語のみとか英語のみを簡単に表示できる方法があれば採用したいですが何かいい方法ないでしょうか?




2014年11月22日土曜日 12時13分20秒 UTC+9 nabedge:
Reply all
Reply to author
Forward
0 new messages