我有一个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>
答案 0 :(得分:4)
当您查看JSF Lifecycle(原始文章是在developerworks重组后隐藏的某个地方)时,您可以看到调用应用程序是呈现响应之前的一个阶段。仅在呈现响应阶段考虑rendered
属性。因此你的代码运行。不是你所期望的,而是按设计工作