2012-08-28 2 views
1

8.5.3에서 로그 아웃 할 때 완전 새로 고침을 트리거합니다. 데이터가 손실 되더라도 상관 없습니다. 사용자가 로그 아웃되거나 세션 시간이 초과 된 경우 부분적 새로 고침이 실패 할 경우 전체 새로 고침을 트리거하려고합니다.Xpages 부분 새로 고침 트리거 완전 새로 고침

두 개의 창이 열려 있습니다. 창 2의 로그 아웃 버튼을 누른 다음 창 1로 돌아와 부분 새로 고침을 시도하면 아무 것도 반환하지 않습니다 (해당 컨트롤의 빈 값). 그렇다면 사용자가 로그 아웃 할 때 완전히 새로 고침을 시작하려면 어떻게해야합니까? 그것은 항상보다는 사용자 이름을 반환

var strUserName = '#{javascript: @Name("[CN]", @UserName());}'; 
alert("Start: " + strUserName); 

:

내가 onComplete를, ONSTART와의 OnError 클라이언트 측 이벤트를 시도하지만,이 로그 아웃이 발생했을 때 내가 찾을 수있는 방법을 알아낼 수 없습니다, 나는 다음과 같은 코드를 시도 사용자가 창 2에서 로그 아웃 한 경우에도 창 1의 익명 성!

부분적 새로 고침이 실패하거나 공백 값을 반환하면 onError 이벤트가 실행되지 않습니다.

모든 아이디어 나 도움을 주시면 대단히 감사하겠습니다.

답변

1

데이터베이스를 잠글려고 했습니까 (Anonymous = NoAccess)? 그런 다음 404 오류가 발생하고 오류 루틴이 발생합니다.

당신이 할 수있는

업데이트 :

  • 는 세션이 만료되면에서 개막 페이지로 리디렉션 메타 헤더를 ​​추가 (사기꾼 솔루션,하지만 이미 가장 많이 사용되는 경우를 잡을 수)
  • 데이터베이스를 잠그지 만 Anonymous에게 "공용 페이지보기"권한을 부여한 다음 익명 사용자가 "공용 액세스 가능"속성으로 표시된 페이지를 갖도록하십시오.
  • 부분적으로 새로 고침이 없는지 확인한 후 페이지를 다시로드합니다. 비즈니스 로직을 변경해야하므로 대부분의 작업이 필요합니다. 코드 샘플이 필요합니다.
+0

스티븐 감사합니다.하지만 유감스럽게도이 데이터베이스를 잠글 수 없으므로 익명 액세스가 필요합니다. – pipalia

+0

페이지에 두 개의 패널이 있습니다. 하나는 익명 사용자 (로그인하라는 메시지)로, 다른 하나는 로그인 한 사용자로 표시됩니다. 따라서 부분 새로 고침이 실패하거나 예를 들어 사용자가 로그 아웃 할 때 아무것도 반환하지 않으면 완전 새로 고침을 실행하여 익명 사용자에 대한 다른 패널을 표시합니다. 완전히 새로 고침 한 후 사용자가 익명. – pipalia

+0

답변 됨 조정 됨 – stwissel

1

onComplete의 약점이 하나 있습니다. 값 바인딩은 페이지가 렌더링 될 때 평가되며 부분 새로 고침 이후에는 평가되지 않습니다. 이것은 요청이 작동하는 방식 때문입니다. 요청이 전송되면 요청에 대한 콜백이 바인딩됩니다 (onStart, onComplete 등). 따라서 새로 고침이 발생하기 전에 클라이언트 측 처리기 코드를 사용할 수 있어야합니다.

부분적인 새로 고침으로 이벤트 처리기 (onComplete/onStart/onError)로 항목을 새로 고치지 않으면 값 바인딩이 페이지로드시에만 업데이트됩니다.

해결 방법에는 여러 가지가 있습니다.

숨겨진 (CSS 기준) xp : text/etc에서 부분 새로 고침을 수행하는 클라이언트 측 함수가 있습니다. 현재 사용자 이름을 보여줍니다. NordReferenceVariable.innerHTML을 사용하여 내용을 가져옵니다. 익명는 현재 사용자의 경우 :

document.location.href = document.location.href

또한 document.location.reload()를 할 수 있지만, 그것은을 제출 재전송되는이 발생할 수 있습니다 .

XPages Extension Library REST services을 사용하십시오. 위와 같지만 익명 인 경우 페이지를 새로 고침하십시오.

+0

고마워요 Tommy, 이것으로 끝났습니다 : var elem = document.getElementById ("# {id : divInvoiceAddress}"); if (elem == null) { \t document.location.reload (true); } – pipalia

관련 문제