[Seasar-user:3787] Re: [S2JSF(Teeda)] 携帯ブラウザで動作しません。

Hirotaka HONMA [E-MAIL ADDRESS DELETED]
2006年 6月 6日 (火) 23:20:31 JST


ほんま@S2JSF & Teedaチームです。

on Tue, 06 Jun 2006 20:40:31 +0900
Shinpei Ohtani <[E-MAIL ADDRESS DELETED]> wrote:

> > PCでも 例えば FireFoxで「JavaScriptを有効にする」のチェックをはずした場合、ALLOW_JAVASCRIPT=true でのMyFaces版や、Teeda版では動作しなくなります。
> > MyFaces版は ALLOW_JAVASCRIPT=false にすれば動作するようになりますが、
> > Teeda版の場合、なにかMyFaces版での ALLOW_JAVASCRIPT=false に相当する設定が
> > 既にあるのか、あるいは、もしなければ、近い将来、Teeda 版でもスクリプトが
> > 動作しない端末ででも動作するようにする予定はありますでしょうか?
> 
> 現状は残念ながら無いですね。
> ALLOW_JAVASCRIPT相当のものが必要かは検討してみます。

ALLOW_JAVASCRIPTを用意しても、CommandLinkとしては正しく動作
しない(遷移するだけでformをサブミットできない)ので、あまり必
要な気がしません。
中途半端に動作してしまうため、問題の引き金になりそうですし。。。

JavaScript無しで動作させたいのでしたら、

- CommandLinkは使用しない
- 画面遷移のLinkはOutputLinkを使用する
- formをサブミットする場合は、CommandLinkではなく、
  CommandButton(inputのtype="image" or type="submit"相当)を
  使用する

とすればOKかなと、今は思っています。
# 今こう思っているだけなので、メリットがあるようなら同様の機
# 能を入れるつもりです。

以下、その理由です。

----

JSFのlinkには、CommandLinkとOutputLinkがあります。
OutputLinkはベースとなるURLとパラメータから構成されます。

jspにこう書くと...
  <h:outputLink id="link1" value="aaa.jsp">
    <f:param name="a" value="1"/>
    <f:param name="b" value="2"/>
    <h:outputText value="xyz" />
  </h:outputLink>

htmlがこう出力されます。
  <a id="link1" href="aaa.jsp?a=1&amp;b=2">xyz</a>

一方、CommandLinkはサブミットボタンと同様な動作をします。
formをサブミットするわけです。
aタグでありながらformをサブミットする必要があるため、JavaScript
を使うことになります。
仕様上もonclink属性にJavaScriptを出力するようになっています。
http://java.sun.com/javaee/javaserverfaces/1.1_01/docs/renderkitdocs/HTML_BASIC/javax.faces.Commandjavax.faces.Link.html

JavaScript OFFの場合にTeeda版S2JSF Exampleが動作しないのは、
画面左に表示されているメニューはCommandLinkだからです。

----

MyFacesでALLOW_JAVASCRIPT=falseの場合は、CommandLinkは
OutputLinkでもCommandLinkでもなく、どちらかというと
OutputLinkに近い動作をするようになります。
formをサブミットせず、普通のaタグとして遷移します。

ただinputのパラメータが送信されなくなるので、required=trueな
コンポーネントがあると、必ずバリデーションエラーになるように
見えます。(コードを読んだだけで動かしていないので、外してい
たらすみません)

S2JSF ExampleのメニューではCommandLinkを遷移に使っているだけ
なので、ALLOW_JAVASCRIPT=falseでも動作しているのです。




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