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

时间:2015-02-23 00:16:15

标签: rendering xpages custom-controls

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

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

当XPage首次加载值时,ssShowControl设置为false但ccWFSCat1Template的AfterPageLoad事件已触发,ssCat1View具有自定义Control的compositeData.cat1View中的值。我假设如果控件没有被渲染,那么它的动作将不被处理,并且它的所有自定义属性都不可用。自定义控件的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>

1 个答案:

答案 0 :(得分:4)

当您查看JSF Lifecycle(原始文章是在developerworks重组后隐藏的某个地方)时,您可以看到调用应用程序呈现响应之前的一个阶段。仅在呈现响应阶段考虑rendered属性。因此你的代码运行。不是你所期望的,而是按设计工作