1

下面是一个简单的 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>
4

1 回答 1

0

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

我认为这是客户端代码中对 location.reload 的调用,它实际上正在解决您的问题。我很想知道增加 refreshId 的范围是否也能解决问题。

于 2012-05-02T15:17:08.353 回答