为什么 AfterPageLoad 事件会在未呈现的自定义控件上触发?

Why would an AfterPageLoad event fire on a custom control that is not rendered?

我有一个如下所示的 XPage。在初始加载 XPage 时,自定义控件 ccWFSCat1template 设置为 Rendered = false。但是,在自定义控件的 AfterPageLoad 中,我有这段代码

sessionScope.ssCat1View = compositeData.cat1View;
getCategory(compositeData.cat1View ,"" , compositeData.targetDB);

当 XPage 首次加载时,值 ssShowControl 设置为 false,但 ccWFSCat1Template 的 AfterPageLoad 事件已触发,并且 ssCat1View 具有来自自定义控件的 compositeData.cat1View 的值。我假设如果未呈现控件,则不会处理它的操作,并且它的 none 自定义属性将可用。自定义控件的 AfterPageLoad 中的 SSJS getCategory 也失败,因为它没有处理操作所需的一切。据我了解,如果某些内容已呈现 = false,则该块内的任何内容均未加载或可用。我很困惑。

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
    xmlns:debug="http://www.openntf.org/xsp/debugtoolbar"
    xmlns:xc="http://www.ibm.com/xsp/custom">

    <xp:this.beforePageLoad><![CDATA[#{javascript:sessionScope.ssShowControl = false}]]></xp:this.beforePageLoad>
    <debug:toolbar defaultCollapsed="false" collapseTo="left"></debug:toolbar>
    <xp:br></xp:br>
    <xp:br></xp:br>
    <xp:panel id="panelData">
        <xp:table>
            <xp:tr>
                <xp:td>
                    <xp:button value="Display" id="button1">
                        <xp:eventHandler event="onclick" submit="true"
                            refreshMode="partial" refreshId="panelData">
                            <xp:this.action><![CDATA[#{javascript:sessionscope.ssShowControl = true;}]]></xp:this.action>
                        </xp:eventHandler>
                    </xp:button>
                </xp:td>
            </xp:tr>
            <xp:tr>
                <xp:td>
                    <xc:ccWFSCat1Template cat1DisplayRows="25"
                        cat1View="vwDemoSort" dataDisplayRows="10"
                        dataView="vwDemoData" rendered="#{javascript:(sessionScope.ssShowControl)}">
                        <xp:this.facets>
                            <xp:text escape="true" id="computedField1"
                                xp:key="viewBodyFacet" value="#{javascript:veData}">
                            </xp:text>
                        </xp:this.facets>
                    </xc:ccWFSCat1Template>
                </xp:td>
            </xp:tr>
        </xp:table>
    </xp:panel>
</xp:view>

当您查看 JSF Lifecycle(原始文章隐藏在 developerworks 重组后的某处)时,您可以看到 invoke application 是 [= 之前​​的一个阶段14=]呈现响应。 rendered 属性 仅在 render response 阶段被考虑。因此您的代码运行。不是你所期望的,但按设计工作