我怀疑这是一个愚蠢的问题,但这里有......
我在自定义控件上有两个字段,两个字段都绑定到托管bean属性(而不是文档字段)。仅在第一个字段中选择特定值时才会呈现第二个字段。
我所看到的是第二个字段的setter在渲染后没有触发(getter正好点燃)。
我通过将第二个字段上的CSS显示属性计算为块或无,取决于第一个字段中的值,解决了这个问题。在这种情况下一切正常,它似乎与首次加载页面时是否呈现第二个字段有关。
* * *编辑 这是示例代码块:
<div class="control-group">
<xp:label value="Party Type:" id="partytypelabel" for="party_typetv">
</xp:label>
<div class="controls">
<xp:comboBox id="party_typetv" value="#{InvolvedRecord.partytypetv}"
required="true" defaultValue=""
readonly="#{javascript:!InvolvedManager.isInEditMode()}">
<xp:selectItem itemLabel="<select>" itemValue="">
</xp:selectItem>
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript:InvolvedManager.getPartyTypes()}]]></xp:this.value>
</xp:selectItems>
<xp:eventHandler event="onchange" submit="true"
refreshMode="partial" disableValidators="true" refreshId="partyfields">
</xp:eventHandler>
</xp:comboBox>
</div>
</div>
<xp:panel id="partyfields" tagName="fieldset">
<xp:this.rendered><![CDATA[#{javascript:InvolvedManager.hasPartyType()}]]></xp:this.rendered>
<xp:div styleClass="control-group">
<xp:label for="Adverse_Party_TypeTL" value="Type:" id="adversepartytypelabel">
</xp:label>
<div class="controls">
<span>
<xp:comboBox id="Adverse_Party_TypeTL"
value="#{InvolvedRecord.adversepartytypetl}" readonly="#{javascript:!InvolvedManager.isInEditMode()}">
<xp:selectItem itemLabel="<select>"
itemValue="">
</xp:selectItem>
<xp:selectItem itemLabel="Company" itemValue="Company">
</xp:selectItem>
<xp:selectItem itemLabel="Individual" itemValue="Individual">
</xp:selectItem>
<xp:eventHandler event="onchange" submit="true"
refreshMode="partial" disableValidators="true" refreshId="adversepartyfields">
</xp:eventHandler>
</xp:comboBox>
</span>
</div>
</xp:div>
</xp:panel>
* * *结束编辑
这是在8.5.3服务器上运行。
有人见过这样的事情,或者因为我感到困惑而提供解释!
答案 0 :(得分:2)
您可以在除renderphase之外的所有阶段渲染组件。这将允许在更新阶段设置值,但会将其隐藏到客户端。
这是一个例子: Conditionally hidden edit box in a partially refreshed panel
修改强>
<xp:this.rendered>
<![CDATA[#{javascript:
if( view.isRenderingPhase() ){
return InvolvedManager.hasPartyType();
}else{
return true;
}
}]]>
</xp:this.rendered>
答案 1 :(得分:0)
您是否实际在渲染数据后将数据输入这些字段?我在很多场合发现,除非已经输入了一些数据,否则特定绑定到托管bean的字段实际上甚至都不会做任何事情。例如,我已经看到过:动态渲染字段,不对其执行任何操作,保存数据源,文档上没有任何字段。如果我执行相同的活动但是将数据添加到字段中,那么一切正常。不是答案。只是一些信息。