[Seasar-user:19204] [mobylet] Mayaaでパソコン用絵文字画像が表示されない

TAKATA, Satoshi [E-MAIL ADDRESS DELETED]
2010年 1月 29日 (金) 14:16:59 JST


高田と申します、はじめまして。

mobylet-taglib 1.0.3
mayaa 1.2.7

の環境で、mayaa単体で使用したときに、mobyletのemojiタグを使うと
キャリアがOTHERの場合絵文字画像の<img />タグにならない現象が発生しました。

mayaaファイルに

<?xml version="1.0" encoding="UTF-8"?>
<m:mayaa xmlns:m="http://mayaa.seasar.org" xmlns:mob="http://taglibs.mobylet.org/">
	<mob:emoji m:id="sun" name="晴れ" />
</m:mayaa>

と定義して、htmlファイルに <h2 m:id="sun">ココ</h2> のようにしておくと、
FireMobileSimulatorでdocomoにするとアイコンになるのですが、ユーザエージェントをPCにしても
<img />タグに置換されません。

web.xmlは以下のとおりで、
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="test" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<display-name>Archetype Created Web Application</display-name>
	<servlet>
		<servlet-name>MayaaServlet</servlet-name>
		<servlet-class>org.seasar.mayaa.impl.MayaaServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<filter>
		<filter-name>mobyletfilter</filter-name>
		<filter-class>org.mobylet.core.http.MobyletFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>mobyletfilter</filter-name>
		<url-pattern>/*</url-pattern>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>INCLUDE</dispatcher>
	</filter-mapping>
	<servlet-mapping>
		<servlet-name>MayaaServlet</servlet-name>
		<url-pattern>*.html</url-pattern>
	</servlet-mapping>
</web-app>


少しソースを追ってみたところ、絵文字画像にしている箇所は、MobyletResponseでラップされた
MobyletPrintWriterのようですが、上記のようにmayaaからEmojiTagを使った場合はOutputStreamしか
呼ばれず、変換処理が行われていないように見えました。

応急処置として、m.tldを独自クラスに書き換えてEmojiTag#doTag()をオーバーライドし、

            Mobylet mobylet = MobyletFactory.getInstance();
            if (mobylet.getCarrier() == Carrier.OTHER) {
                Emoji emoji = SingletonUtils.get(EmojiPoolFamily.class).getEmojiPool(carrier).get(name);
                JspWriterUtils.write(
                        getJspContext().getOut(), 
                        designer.getImageEmoji(emoji)
                        );
            } else {
                JspWriterUtils.write(
                        getJspContext().getOut(),
                        designer.get(name, carrier)
                        );
            }

のように、キャリア判定で対処しています。
どこか使い方が間違っているか、この方法以外にあればご教示いただけないでしょうか。

高田 聡






Seasar-user メーリングリストの案内