2012-04-23 2 views
1

다음은 sessionbope 변수에 바인딩 된 radiobuttongroup을 가진 간단한 Xpage입니다. 라디오 버튼 그룹의 onclick 이벤트는 계산 된 필드를 설정합니다. 세션 범위 변수를 초기화하는 afterPageLoad 이벤트가 있습니다.sessionscope 변수를 지운 후에 radiobuttongroup의 onclick 이벤트가 실행되지 않습니다.

모든 작품이 훌륭합니다. 그러나 디버그 사용자 정의 컨트롤을 사용하여 세션 범위 변수를 지우면 onclick 이벤트가 실행되지 않습니다. 사용자는 원하는 모든 라디오 버튼을 클릭 할 수 있으며 F5를 눌러 페이지가 다시로드 될 때까지 계산 된 필드가 변경되지 않습니다. 아래는 내 페이지 소스입니다. onclick 이벤트를 발생시키는 방법에 대한 제안 사항이 있습니까? 사용자가 세션 변수를 타임 아웃시킨 다음 라디오 버튼을 클릭하면 큰 유용성 문제가됩니다. 대상 refreshId 충분히 큰 아닌 곳 난 내 자신의 xpage 응용 프로그램에서이 같은 동작을 여러 번 본 것, 그리고이 문제는 일부 페이지 발생하는 것으로 나타났습니다

  <?xml version="1.0" encoding="UTF-8"?> 
       <xp:view xmlns:xp="http://www.ibm.com/xsp/core"> 
       <xp:this.afterPageLoad><![CDATA[#{javascript:print("starting the afterPageLoad event"); 
       if (sessionScope.init != true|| sessionScope.radioData == null){ 
       //setup default values' 
       print("initing the value"); 
       sessionScope.init = true; 
       sessionScope.radioData = "Red"; 
       } 
      }]]></xp:this.afterPageLoad> 
       <xp:radioGroup id="radioButtons" value="#{sessionScope.radioData}"> 
        <xp:selectItem itemLabel="Red"></xp:selectItem> 
        <xp:selectItem itemLabel="Green"></xp:selectItem> 
        <xp:selectItem itemLabel="Blue"></xp:selectItem> 
        <xp:eventHandler event="onclick" submit="true" 
        refreshMode="partial" refreshId="computedField1"> 
        <xp:this.action><![CDATA[#{javascript:print("starting onclick event"); 
       if (sessionScope.init != true){ 
        print("reload the page"); 
       context.reloadPage(); 
       } 
       var radioval = getComponent("radioButtons").getValue(); 
       getComponent("computedField1").setValue(radioval); }]]></xp:this.action> 
       </xp:eventHandler></xp:radioGroup> 
       <xp:text escape="true" id="computedField1"></xp:text></xp:view> 
+0

빈 XPage (8.5.3, Debug Toolbar v1.3)에 코드를 복사했습니다. IE 8 및 FF 11.에서 테스트되었습니다. OnClick-Event는 두 가지 모두의 문제에서 해고되었습니다. –

+0

페리의 Debug Custom Control을 사용하고있었습니다. 다른 브라우저에서로드하고 다른 페이지에서 세션 변수를 삭제합니다. 디버그 도구 모음을 시도했는데 그런 식으로 작동합니다. 차이점이 무엇인지 궁금하십니까? – Howard

+0

이것이 디버그 사용자 정의 컨트롤이 sessionScope 변수를 지우는 방법과 더 관련이 있는지 궁금합니다. 다음 코드로 버튼을 만들었고 XPage에서이 버튼을 사용하면 onclick 이벤트가 실행되지 않습니다. 디버그 사용자 정의 컨트롤의 Clear Scope 버튼을 사용하면 ... var iter = sessionScope.keySet(). iterator(); while (iter.hasNext()) { sessionScope.remove (iter.next()); } ... 이것은 sessionScope 변수가 시간 초과되는 것과 동일하다고 가정합니다. 페이지를 밤새 찾을 수있게 할 것입니다! 고마워, 하워드 – Howard

답변

0

하워드 갱신 범위는 컨트롤에 필요한 모든 데이터를 다시로드합니다. refreshId를 페이지의 기본 div로 변경하거나 전체 페이지 새로 고침을 사용하면 예상대로 작동합니다.

저는 실제로 문제를 해결하는 클라이언트 측 코드에서 location.reload를 호출한다고 생각합니다. refreshId의 범위를 늘리면 문제가 해결되는지 배우는 것도 흥미로울 것입니다.

관련 문제