2011-08-18 16 views
0

私たちには互いにピアアプリケーションであるWebモジュールのグループがあります。 jQueryを使用してそれらをまとめます。これらの異なるモジュールはすべてJSFを使用します。異なるモジュールは、異なるJava EEアプリケーションサーバ上に配置されてもよい。JSF/a4jマッシュアップ - ビューステートIDの有効期限が切れました

アカウントを開くためのJSFページを想像してみてください。このページでは、顧客検索機能を使用して、アカウントを開設する顧客を検索する場合があります。アカウント開かれたフォームを持つJSFページは1つのWebモジュールから提供され、クライアント検索ページは別のWebモジュールから提供されます。

...jsf page loaded from http://openaccount.com/openForm.xhtml 

... code to load a search from from elsewhere... 
<script type="text/javascript"> 
    jQuery(document).ready(function() { 
     jQuery('#search_gadget').load('http://search.com/searchForm.xhtml'); 
         }); 
</script> 
<search_gadget/> 
<br/> .. the rest of the open account form... 

... searchFormとopenFormの両方がJSF/a4jページです。

searchForm 'gadget'が検索を実行するためにa4j呼び出しを行い、新しいビュー状態IDが返されると、openForm.xhtmlのビュー状態IDも更新されるという問題があります。 openForm.xhtmlを使用してフォームをサーバーにポストすると、ビューステートIDは同期していません(異なるサーバーサイドビューステートを持つ別のWebモジュールへのa4j呼び出しによって最後に更新されたため)。

上記の方法に適したビューステートIDを分離する方法はありますか? jsfビューの状態を別のWebモジュールのマッシュインされたコンポーネントに分離できるようにしたいのですが?

答えて

0

だから、ここ

は...私たちはやってしまったものですすべての私たちの個別のWebモジュールが同じドメインを持っていますが、それぞれが固有のコンテキストルートwww.bank.com/ ワーウは//somepageを占めています.xhtml、またはwww.bank.com/ waw/transfers /somepage.xhtml。これらのコンテキストルートを使用して、ビューの状態を更新する必要があるフォームの範囲を指定します。そのような

(このソリューションは文句を言わないマッシュしたいすべての皆さんのために働くが、それが私たちのために動作します)...

var wlf_a4jAjaxProcessResponse = A4J.AJAX.processResponse; 

function wlf_ajaxIsolate(req){ 

wlf_saveViewState(req.form); 
wlf_a4jAjaxProcessResponse(req); 
wlf_restoreViewState(); 
} 

A4J.AJAX.processResponse = wlf_ajaxIsolate;  


function wlf_saveViewState(form) { 

    var action = form.baseURI; 

    if (typeof action !== 'undefined') { 

     var i1 = action.indexOf("/waw/"); 
     var i2 = action.indexOf("/", i1+5); 
     var currentPwa = action.substring(i1+5, i2); 

     jQuery("#javax\\.faces\\.ViewState").each(function() { 

       var form = jQuery(this).closest("form"); 
       var formAction = jQuery(form).attr('action'); 
       var i3 = formAction.indexOf("/waw/"); 
       var i4 = formAction.indexOf("/", i3+5); 
       var pwa = formAction.substring(i3+5, i4); 

       if (pwa !== currentPwa) { 
       jQuery(this).attr('id',"_javax.faces.ViewState_"); 
       jQuery(this).attr('name',"_javax.faces.ViewState_");  
       } 
     }); 
    } 
}; 


function wlf_restoreViewState() { 

    jQuery("#_javax\\.faces\\.ViewState_").each(function() { 

     jQuery(this).attr('id',"javax.faces.ViewState"); 
     jQuery(this).attr('name',"javax.faces.ViewState");    
    }); 
}; 
関連する問題