我有一个带有djTabContainer的Xpage,并且标签容器包含多个自定义控件。其中一个自定义控件仅在满足特定条件时才呈现内容,如下所示;
<xp:this.rendered><![CDATA[#{javascript:getComponent("conCapRev").getValue()
== "External”}]]></xp:this.rendered>
我想在满足以下两个条件之一时立即呈现“自定义控件”内容,其中,基本上,呈现标记在Javascript中具有或。如果无法做到这一点,那么可以有两个渲染标签吗?
我应该提到,选项卡式“自定义控件”的呈现(或不呈现)应该在创建文档时发生,而不仅仅是在创建和保存文档之后发生。
上面的代码适用于这种情况。如下一个XML标记所示,当我更改document1的getComponent时,它也可以正常工作。
<xp:this.rendered><![CDATA[#{javascript:document1.getValue("conCapRev")
== "External"}]]></xp:this.rendered>
但是,当我添加如下所示的第二个条件时,它将不起作用,并且始终呈现“自定义控件”。请问该如何解决?
<xp:this.rendered><![CDATA[#{javascript:document1.getValue("conCapRev") == "External"
|| document1.getValue("conTenderType") != "Extension"}]]></xp:this.rendered>
为了添加更多信息以使问题更清楚-在“合同”文档启动期间,用户决定conCapRev字段是“内部”还是“外部”,然后继续使用“合同”常规信息,用户选择一个值可能的列表中的投标类型(ConTenderType字段),其中之一是“扩展名”。然后,用户至少完成带有多个字段的“工作流”选项卡,并且此时可以保存或退出合同(放弃而不保存)。在保存合同之前或之后,用户可以转到另一个名为“基线”的选项卡,如果conCapRev字段为“ External”或conTenderType字段为“ Extension”,则该选项卡将不会呈现。
最佳答案
您在最后一个问题的句子中说,您想要基准自定义控件
NOT be rendered if
the conCapRev field is "External" OR
the conTenderType field is "Extension"
或换一种说法
be rendered if
the conCapRev field is NOT "External" AND
the conTenderType field is NOT "Extension"
因此,您的渲染条件应为
<xp:this.rendered><![CDATA[#{javascript:
document1.getValue("conCapRev") != "External" &&
document1.getValue("conTenderType") != "Extension"
}]]></xp:this.rendered>
评论后更新:
更改conTenderType的值后,您必须部分刷新
conTenderType的listBox
ContractBaselinePanel面板
ContractDetailPanel面板
您可以使用级联的CSJS XSP调用来执行此操作。确保您不要尝试刷新具有render属性的元素,就好像它没有被渲染一样就无法刷新(因为它不在客户端)。
<xp:listBox
id="listBoxConTenderType"
value="#{document1.conTenderType}">
<xp:selectItem
itemLabel="Extension">
</xp:selectItem>
<xp:selectItem
itemLabel="...">
</xp:selectItem>
<xp:eventHandler
event="onchange"
submit="false">
<xp:this.script><![CDATA[
XSP.partialRefreshPost("#{id:listBoxConTenderType}", {
onComplete: function() {
XSP.partialRefreshGet("#{id:ContractBaselinePanel}", {
onComplete: function() {
XSP.partialRefreshGet("#{id:ContractDetailPanel}", {});
}
});
}
});]]></xp:this.script>
</xp:eventHandler>
</xp:listBox>
<xp:panel
id="ContractBaselinePanel">
<xp:panel>
<xp:this.rendered><![CDATA[#{javascript:
document1.getValue("conCapRev") != "External" &&
document1.getValue("conTenderType") != "Extension"
}]]></xp:this.rendered>
...your Baseline Custom Control...
</xp:panel>
</xp:panel>