2

この回答に見られるように、OmniFaces を使用して PrimeFaces スクリプトを延期しようとしています。

しかし、PrimeFaces は、次のように頭の中でインライン スクリプトをレンダリングします (スクリプトは美化され、私によってコメントされています)。

<script type="text/javascript">
    if(window.PrimeFaces) {
        // this line is always rendered in Development mode.
        PrimeFaces.settings.projectStage='Development';
        // these lines are added if Client Side Validation is enabled.
        PrimeFaces.settings.locale='pt_BR';
        PrimeFaces.settings.validateEmptyFields=true;
        PrimeFaces.settings.considerEmptyStringNull=true;
    }
</script>

アプリケーションを実行すると、いくつかの JS エラー (ファイルとエラー) が発生します。

validation.js.xhtml?ln=primefaces&v=5.3:1
Uncaught TypeError: Cannot read property 'en_US' of undefined

beanvalidation.js.xhtml?ln=primefaces&v=5.3:1
Uncaught TypeError: Cannot read property 'en_US' of undefined

produto.xhtml:2
Uncaught TypeError: Cannot set property 'locale' of undefined

次のように、いくつかの変数を に入れるとprimefaces.deferred.js:

if (!primeFacesLoaded) {
    window.PrimeFaces = {
        // variables added - begin
        settings: {
            projectStage: 'Development',
            locale: 'pt_BR',
            validateEmptyFields: true,
            considerEmptyStringNull: true
        },
        // variables added - end
        ab: function () {
            defer("ab", arguments);
        },
        cw: function () {
            defer("cw", arguments);
        },
        focus: function () {
            defer("focus", arguments);
        }
    };
}

最初の 2 つのエラーは引き続き発生しますが、3 番目のエラーはなくなります。

どうやら、PrimeFaces JS オブジェクトには次のプロパティがありません。

locales: {
    // other values...
    en_US: {
        // other values...
    }
},
util: {
    // other values...
},

問題は、これらの PrimeFaces スクリプト プロパティを正しく延期する方法です。

PS: バージョン: PrimeFaces 5.3、OmniFaces 2.3、Payara Server (Glassfish) 4.1.1.161

4

1 に答える 1