清除sessionscope变量后,radiobuttongroup的onclick事件不会触发

时间:2012-04-23 19:53:37

标签: xpages

下面是一个带有radiobuttongroup的简单Xpage,它绑定到sessionScope变量。单选按钮组的onclick事件设置计算字段。有一个afterPageLoad事件来初始化会话范围变量。

一切都很棒。但是,如果我清除会话范围变量(使用调试自定义控件),那么onclick事件永远不会触发。用户可以单击所需的单选按钮,计算字段永远不会更改,直到通过按F5重新加载页面。以下是我的页面来源。有关如何触发onclick事件的任何建议?如果用户让会话变量超时然后开始单击单选按钮,这将是一个很大的可用性问题。

霍华德

            <?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>

1 个答案:

答案 0 :(得分:0)

我在自己的xpage应用程序中多次看到过这种相同的行为,我发现问题只发生在部分页面刷新的情况下,目标refreshId的范围不够大,无法重新加载所需的所有数据。控制。当我将refreshId更改为页面的主div(或使用整页刷新)时,所有内容都按预期工作。

我认为这是客户端代码中对location.reload的调用,实际上是在解决您的问题。我有兴趣了解是否增加refreshId的范围也可以解决问题。