2017-12-19 13 views
0

私のアプリケーションにIE 11を使用しています。私はここでセッションの問題に直面しています。Java IEは古いHTTPサーブレットセッションオブジェクトを与えます

最初のトランザクションを実行するとき、トランザクション応答jspページでは、現在のトランザクションは1000ではありません[(TransactionDO)session.getAttribute( "txnDetails");]。 同じjspでng-init = "GetTxnResponse()"をdiv内に作成し、js関数からトランザクション番号を1000として取得します。

次に、トランザクションレスポンスJSPページで、ログアウトせずに同じセッションで2番目のトランザクションを実行します。私は現在のトランザクションをHTTPセッションから1001として取得します。 ng-init = "GetTxnResponse()"と同じjspで、トランザクション番号を1001ではなく1000とします。

これはIEでのみ発生します。解決するのを手伝ってください。以下は私の参照用コードです。

<fmt:setLocale value='en_US' /> 
<% 
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); 
// HTTP 1.1. 
response.setHeader("Pragma","no-cache"); //HTTP 1.0 
response.setDateHeader ("Expires", 0); //prevents caching at the proxy server 

TransactionDO txnDO = (TransactionDO) session.getAttribute("txnDetails"); 
System.out.println("Txn no : "+txnDO.txnNo()); // Here i get 1001 second time 

%> 

<fmt:bundle basename="applicationresources"> 
    <div ng-controller="txnController" 
     ng-init="GetTxnResponse()" > 
     --- 
     --- 
    </div> 
</fmt:bundle> 

- -

- JSPコードJSコード -

self.GetTxnResponse = function() { 
    if (txnStatus == '00') { 
     $http.get(CONTEXT_PATH + '/getResponseDetails').success(function(data) { 
     // Here i get 1000 from data second time 
     } 
    } 

- Javaコード -

@RequestMapping(value="/getResponseDetails", method=RequestMethod.GET) 
    public @ResponseBody TransactionDO getResponseDetails(HttpServletRequest httpRequest){ 
    TransactionDO txnDO = null; 
     txnDO = (TransactionDO) httpRequest.getSession().getAttribute("txnDetails");   
     return txnDO; 
    } 

答えて

1

はページステートレスしてください。それはしっかりした練習です。また、本番サイトでのキャッシュも可能です。

<div ng-controller="txnController" 
    ng-init="GetTxnResponse(${txnDetails.txnNo})" > 

self.GetTxnResponse = function(txnNo) { 
    if (txnStatus == '00') { 
     $http.get(CONTEXT_PATH + '/getResponseDetails/' + txnNo).success(function(data) { 
     // Here i get 1000 from data second time 

@RequestMapping(value="/getResponseDetails/{txnNo}", method=RequestMethod.GET) 
public @ResponseBody TransactionDO getResponseDetails(HttpServletRequest httpRequest, 
     @PathVariable long txnNo) { 
    ... 
} 

おそらく、表示されているコードよりページを少し変更する必要があります。

これをもう少し説明すると、ユーザーは同じページで2つのタブを開き、次に再生することができます。何だと思う?

+0

ありがとうJoop。しかし、私はtxnDetailsオブジェクトから非常に多くのフィールドが必要です。オブジェクトgetAttribute( "txnDetails")として取得する理由、しかし、IEは古いセッションオブジェクトを提供します。 – DEADEND

+0

私の答えは、セッション内のトランザクションにトランザクションIDのマップを持ち、トランザクションIDでリクエストを行うことになります。そして混乱は起こりません。 BTWでは、おそらく速いIEの修正はリクエストURL '' t = "+ System.currenMillis()'に追加することでしょう。 –

+0

ありがとうございました。それを試してみましょう。 – DEADEND

関連する問題