PrimeFaces、PrimeFaces Mobile、MyFaces ExtVal の 3 つのフレームワークを一緒に使用しようとしています。ライブラリのバージョンは、PF 3.3.1、PF Mobile 0.9.3、MyFaces ExtVal 2.0.5 です。次のコードを検討してください。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<f:view>
<h:head>
<meta charset="UTF-8" />
<title>Primefaces Mobile test</title>
</h:head>
<h:body>
<h:form>
<p:commandButton value="Oi" />
</h:form>
</h:body>
</f:view>
</html>
プロジェクトに PrimeFaces と Mobile jar しかない場合、レンダリングされた commandButton は期待どおりです。
<button id="j_idt6:j_idt7" name="j_idt6:j_idt7" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" onclick="PrimeFaces.ab({source:'j_idt6:j_idt7'});return false;" type="submit"><span class="ui-button-text">Oi</span></button>
これはデフォルトの PrimeFaces レンダラーです。f:view を renderKitId を PRIMEFACES_MOBILE として構成すると、レンダリングされるボタンは次のようになります。
<button id="j_idt6:j_idt7" name="j_idt6:j_idt7" type="submit" data-iconpos="left" onclick="PrimeFaces.ab({source:'j_idt6:j_idt7'});return false;">Oi</button>
こちらもさすがにOK。ここで、MyFaces ExtVal jar を追加すると、すべてが壊れ、PRIMEFACES_MOBILE だけがコンポーネントのレンダラーになります。動作をテストするために、jar を追加しました: myfaces-extval-bean-validation-2.0.5.jar、myfaces-extval-core-2.0.5.jar、および myfaces-extval-property-validation-2.0.5.jar。次に、renderKitId を削除して、デフォルトの PrimeFaces ライブラリを使用する必要がありますが、結果は次のようになります。
<button id="j_idt6:j_idt7" name="j_idt6:j_idt7" type="submit" data-iconpos="left" onclick="PrimeFaces.ab({source:'j_idt6:j_idt7'});return false;">Oi</button>
f:view の renderKitId を HTML_BASIC に強制しようとしましたが、commandButton の PrimeFaces Mobile バージョンをレンダリングし続けます。
皆さん、何か提案はありますか?RenderKitId を定義する前は、システムは問題ありませんでしたが、ライブラリをアップグレードすると、このエラーが発生しました。PrimeFaces フォーラムに投稿しましたが、解決方法がわかりませんでした。また、なぜこのようなことが起こっているのかわかりません。