2014-01-08 2 views
2

IBM WCS에서 scriplet를 사용하여 jsp로 세션을 설정하고 여기에 값을 설정하고 있지만 페이지를 다시로드 할 때 세션 값이 손실됩니다. 여기 IBM Websphere Commerce에서 세션이 재설정 중임

내가 그러나 내 로컬 툴킷 그것의에 세션 속성

<% 
session.setAttribute("testMap", testValue); 
%> 

를 설정하고 방법은 잘 작동하지만,이 문제를 가진 서버에 배포 될 때

에 관한 모든 솔루션을 제안하십시오

감사합니다. Ankit

+0

페이지 상단에 <% @ page session = "true"%> 문이 있습니까? – DanielBarbarian

+0

프로덕션 배포가 클러스터되어 있습니까? 그렇다면 세션 선호도가 켜져 있습니까? –

답변

0

짧은 대답은이 작업을 수행하지 않습니다. WebSphere Commerce는 일반적으로 분산 환경에 전개되며, 코드가 전개 될 때이 효과를 볼 수 있습니다. 애플리케이션이 WebSphere 노드를 통해 세션을 지속시키는 것은 많은 작업입니다. 대신 쿠키를 사용하거나 데이터베이스 테이블을 작성하십시오. 세션에 있어야하는지도에 무엇을 저장하려고하십니까?

0

Websphere Commerce의 세션 상태는 사용자 ActivityToken에 연결된 비즈니스 컨텍스트에 저장됩니다.

세션 상태는 데이터베이스에 직렬화되며 사용자 세션이 클러스터의 다른 서버로 이동하는 경우 사용할 수 있습니다.

<BusinessContext ctxId="MyContext" 
       factoryClassname="com.ibm.commerce.context.factory.SimpleBusinessContextFactory" > 
<parameter name="spiClassname" value="com.myorg.commerce.context.contentimpl.MyContextImpl" /> 

그런 다음 필요한 :

당신은 WC \ XML \ 설정 \ BusinessContext.xml,과 같이에서 BusinessContext.xml에 새로운 컨텍스트 요소를 등록하여 자신의 세션 상태를 추가 할 수 있습니다 당신의 상황이

<!-- web site store front configuration --> 
<InitialBusinessContextSet ctxSetId="Store" > 
    ... 
    <InitialBusinessContext ctxId="MyContext" createOrder="0" /> 
컨텍스트는 다른 컨텍스트와 함께 생성됩니다

에 존재하며, 어느 CTXDATA 다에 연재 될 세션의 종류를 알 수 있습니다 tabase 테이블 (알려진 사용자의 경우) 및 익명 사용자의 브라우저 쿠키

의 모양은 귀하의 상황에 맞는 클래스 :

인터페이스 클래스 com.myorg.commerce.context.mycontextimpl.MyContext

public abstract interface MyContext extends Context 
{ 
    public static final String CONTEXT_NAME =  "com.myorg.commerce.context.mycontextimpl.MyContext"; 
    public abstract String getSomeValue(); 
    public abstract void setSomeValue(String v); 
} 

그리고 구현 공용 클래스 MyContextImpl이 AbstractContextImpl에게 구현을 확장 MyContext { }

새 값을 설정 한 후 "this.setDirty (true)"를 사용하여 chang 지속성을위한 것.

또한 직렬화해야하는 컨텍스트의 값을 반환하려면 getContextAttributes를 오버라이드하고 값을 다시 설정하려면 setContextAttributes를 대체해야합니다.

핵심은 단순히 값을 저장하는 것 이상의 의미를 갖는다는 점입니다. 사용자가 사이트와 상호 작용하는 모든면에서 유효해야하는 불변 조건을 문맥에 넣습니다. 가장 좋은 예로 EntItlementContext가 있습니다. EntitlementContext는 구입하려는 계약을 보유하고 있으며 계산하기가 다소 복잡 할 수 있습니다.

어쨌든, 당신이 사용하는 거라고 명령에서 컨텍스트에 액세스 할 수
this.getCommandContext().getContext(MyContext.CONTEXT_NAME); 

그리고 당신은로 사용할 수 있습니다

if (request.getAttribute("myContext") == null) { 
    request.setAttribute("myContext", ((CommandContext) request.getAttribute("CommandContext")).getContext(MyContext.CONTEXT_NAME)); 
} 

한 후 JSP에서

$ {myContext.someValue}

관련 문제