2016-10-03 7 views
1

私は非常に多くのことを試みました。私はxpagesが複数回更新され、途中の入力の進捗に基づいて、異なる分野に集中したいと思っています。最新では、出力スクリプトと次のコードを使用していますが、viewScope変数を認識していないように見えるので、ページの最初のフィールドにフォーカスするか、まったくフォーカスしません。私は、プログレッションを通して異なる時間にviewScope変数を設定しました。xPages - リフレッシュ後にページ上の別の時間にフォーカスを設定する方法

私の質問は:私は、ページの一部だけので、出力スクリプトを入れてやる

  1. は、進行の先頭に表示されます。

  2. さまざまな場所を効率よく認識するために、どのようなコードを使用できますか?

  3. 出力スクリプトよりも良い方法はありますか?ここで

私が使用しているコードは

答えて

2

あなたのコードはSSJSとCSJSのミックスです...... ...

var vNextFocus = viewScope.vsNextFocus; 
if(vNextFocus == "CustomerName") { 
    XSP.getElementById("#{id:CustomerName}").focus(); 
} 
if(vNextFocus == "PONbr") { 
    XSP.getElementById("#{id:PONbr}").focus(); 
} 

その他、各種あります。

onClientLoadイベントをXPageに追加してください。
サーバ側のクライアントIDを
#{javascript: ...get client id on server side...}と計算してください。
結果を文字列としてCSJSコードXSP.getElementById("...").focus()に入れます。
このようにして、viewScope.vsNextFocusで設定されたフィールドがフォーカスを取得します。

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"> 
    <xp:eventHandler 
     event="onClientLoad" 
     submit="false"> 
     <xp:this.script><![CDATA[ 
      XSP.getElementById("#{javascript: 
       try { 
        getComponent(viewScope.vsNextFocus).getClientId(facesContext); 
       } catch(e) { 
        getComponent('inputText1').getClientId(facesContext); 
       } 
      }").focus(); 
     ]]></xp:this.script> 
    </xp:eventHandler> 
    ... your controls ... 
</xp:view> 

ただ、viewScope.vsNextFocusが設定されていない場合、コードのデフォルトは「inputText1」です。

+0

一部のリフレッシュは私のxpageでは機能しません。したがって、完全なリフレッシュをすべて使用しています。最初のカップルでは、​​ページの領域が表示されるようになっています。部分リフレッシュがうまくいかない理由はわかりません。投稿したコードはCSJSコードで動作しますか? –

+0

OK。私は自分の答えを完全に更新しました。それが今あなたのために働くことを願っています。 –

+0

クヌート、私は十分にあなたに感謝することはできません。私はとても多くのことを試みましたが、おそらくフィールドに集中し、そのフォーカスを異なる時に変えようとすると、5日以上かかることがありました。あなたは私のアプリを見て喜んで私に提案をしますか?部分的なリフレッシュは、いくつかのエラーウィンドウをすばやく表示してから消えます。私はこのエラーを過去に投稿しました。また、あなたが投稿したコードは、二重引用符が正しく閉じられていないという警告を表示しますか? –

関連する問題