[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 メーリングリストの案内