1

BeforePageKoad イベントで SSJS を実行しています。SSJS の最後のステップとして、部分的な更新を行います。私のスクリプトには、次のコード行があります。

view.postScript("partialRefreshGet('#{id:panelAll}')")

実行すると、partialRefreshGet が定義されていないというエラーが表示されます。呼び出しの形式に何かが欠けていると思いますが、私が理解しているように、これはうまくいくはずです。誰もが前にこのようなことをしました。このコードを省略した場合は、ボタンから panelAll を手動で更新すると、すべてが正しく機能します。

4

3 に答える 3

4

beforePageLoad で before view.postScript を使用することはできません。afterPageLoad または beforeRenderResponse に移動してみてください。最近、同じ問題に遭遇しました。

http://notesspeak.blogspot.com/2013/08/viewpostscript-only-works-for-certain.html

view.postScript() を使用できる場所の概要は次のとおりです。

  1. onClientLoad = 何も起こらない
  2. beforePageLoad = XSP エラー
  3. afterPageLoad = WORKS!
  4. afterRestoreView = 何も起こらない
  5. beforeRenderResponse = WORKS!
  6. afterRenderResponse = 何も起こらない

なぜこれが起こっているのかを知るには、ブログ投稿の下部にある Tim Tripcony のコメントを読んでください。

于 2013-09-20T21:24:11.833 に答える
3

XPage にスクリプトブロックを追加して、必要な部分更新を行うだけです。

編集:

<xp:scriptBlock id="scriptBlock2" rendered="#{javascript:requestScope.doRefresh}">
    <xp:this.value><![CDATA[
       XSP.addOnLoad( function(){ XSP.partialRefreshGet('#{id:panelAll}') } );
   ]]>
   </xp:this.value>
</xp:scriptBlock>

beforePageLoadで、必要に応じて requestScope 変数を設定します。

于 2013-09-22T05:03:32.470 に答える
1

この答えは少し遅すぎるかもしれませんが、誰かにとって役立つことを願っています.

したがって、簡単な答えは、次の SSJS を使用して別のコンポーネントを更新することです。 view.postScript("XSP.partialRefreshGet('#{id:Component ID}')")

しかし、私はそれを試すのに苦労しました.Tim Tripconyが示唆したように、ブラウザがまだ最初の更新を受信して​​いる間にコードが実行されるのが早すぎるようで、動作しません. そこで、次のように OnLoad イベントにアタッチしてみました。

view.postScript("XSP.addOnLoad(function() {XSP.partialRefreshGet('#{id:Component ID}')})")

しかし、それもうまくいきませんでした。だから私はそれを古い方法で行い、次のようにsetTimeout()を使用してスクリプトを別のスレッドで動作させることで機能しました:

view.postScript("setTimeout(function(){XSP.partialRefreshGet('#{id:Component ID}')}, 1)");

そして、それは魅力のように機能しています!

于 2015-09-28T14:35:31.670 に答える