다음은 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>
빈 XPage (8.5.3, Debug Toolbar v1.3)에 코드를 복사했습니다. IE 8 및 FF 11.에서 테스트되었습니다. OnClick-Event는 두 가지 모두의 문제에서 해고되었습니다. –
페리의 Debug Custom Control을 사용하고있었습니다. 다른 브라우저에서로드하고 다른 페이지에서 세션 변수를 삭제합니다. 디버그 도구 모음을 시도했는데 그런 식으로 작동합니다. 차이점이 무엇인지 궁금하십니까? – Howard
이것이 디버그 사용자 정의 컨트롤이 sessionScope 변수를 지우는 방법과 더 관련이 있는지 궁금합니다. 다음 코드로 버튼을 만들었고 XPage에서이 버튼을 사용하면 onclick 이벤트가 실행되지 않습니다. 디버그 사용자 정의 컨트롤의 Clear Scope 버튼을 사용하면 ... var iter = sessionScope.keySet(). iterator(); while (iter.hasNext()) { sessionScope.remove (iter.next()); } ... 이것은 sessionScope 변수가 시간 초과되는 것과 동일하다고 가정합니다. 페이지를 밤새 찾을 수있게 할 것입니다! 고마워, 하워드 – Howard