私のアプリケーションに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;
}
ありがとうJoop。しかし、私はtxnDetailsオブジェクトから非常に多くのフィールドが必要です。オブジェクトgetAttribute( "txnDetails")として取得する理由、しかし、IEは古いセッションオブジェクトを提供します。 – DEADEND
私の答えは、セッション内のトランザクションにトランザクションIDのマップを持ち、トランザクションIDでリクエストを行うことになります。そして混乱は起こりません。 BTWでは、おそらく速いIEの修正はリクエストURL '' t = "+ System.currenMillis()'に追加することでしょう。 –
ありがとうございました。それを試してみましょう。 – DEADEND