Teeda 1.0 beta4リリース
Teeda 1.0 beta4をリリースします。
-redirectが効かない点を修正しました。
-UIComponentBaseでrestoreがうまくいかない点を修正しました。
-JavaScriptをpathごとにOFFする機能を追加しました。
-JavaScriptがOFFの場合でもCommandLinkが動作するよう修正しました。
-FacesServletがJSF1.1仕様準拠でない点(finalクラス)を修正しました。
-PhaseListenerのJSF1.1仕様準拠でない点(beforePhaseが呼ばれたら、afterPhaseを確実に呼ぶ)よう修正しました。
-Portletで動作での挙動が不安定な点を修正しました。
JavaScriptをpathごとにOFFする機能ですが、
以下のようにweb.xmlにそのpathを指定します。
<context-param> <param-name>teeda.JAVASCRIPT_NOT_PERMITTED_PATH</param-name> <param-value>/link_no_js</param-value> </context-param>
このpathにマッチした場合、JavaScriptが必要不可欠なCommandLinkのような
コンポーネントでも、JavaScriptがOFFの際の挙動を記述することができます。
(Rendererに手をいれてやります)
現状、Teedaの標準コンポーネントではCommandLinkだけがJavaScriptのON/OFFで
挙動が変わります。JavaScriptがOFFの場合、CommandLinkは通常の
aタグでクエリストリングに必要なパラメータを保持するようになります。
内部に書かれたUIParameterもkey=value形式でクエリストリングに出力されます。
吐くHTMLはこんな感じです。基本的にCommandLinkはJavaScriptありきで
動くコンポーネントですが、JavaScript無しでも画面遷移などある程度対応できます。
<html> <head> <title>commandLink.jsp</title> </head> <body> <form id="commandLinkForm" name="commandLinkForm" method="post" enctype="application/x-www-form-urlencoded" action="/teeda-example/faces/link_no_js/commandLink.jsp"> <input type="text" id="text1" name="commandLinkForm:text1" value="124" /> <a id="link1" href="/teeda-example/faces/link_no_js/commandLink.jsp?commandLinkForm/link_no_js/commandLink.jsp=commandLinkForm/link_no_js/commandLink.jsp&commandLinkForm%3A__link_clicked__=commandLinkForm%3Alink1">foo</a> <input type="hidden" name="commandLinkForm/link_no_js/commandLink.jsp" value="commandLinkForm" /></form> </body> </html>
日本の現場でよくありそうなのは下記のようにモバイルのキャリアごとに
pathが分かれている場合だと思いますが、これで対応可能になると思います。
<context-param> <param-name>teeda.JAVASCRIPT_NOT_PERMITTED_PATH</param-name> <param-value>/i, /vf, /au</param-value> </context-param>
これからバグフィックスを含め、どんどんリリースしていこうと思います。
(余談)
最初からJSが使えない環境がわかっている場合の開発でJSFを使う場合は、
CommandLinkは使わないのが一番堅いんじゃないかと言うのが、個人的な意見です。
MyFacesのMLとかでも、そういうの流れてますしね。