未呈现的字段绑定到托管bean而不是触发setter

时间:2014-01-03 14:03:02

标签: xpages managed-bean

我怀疑这是一个愚蠢的问题,但这里有......

我在自定义控件上有两个字段,两个字段都绑定到托管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="&lt;select&gt;" 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="&lt;select&gt;"
                        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服务器上运行。

有人见过这样的事情,或者因为我感到困惑而提供解释!

2 个答案:

答案 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的字段实际上甚至都不会做任何事情。例如,我已经看到过:动态渲染字段,不对其执行任何操作,保存数据源,文档上没有任何字段。如果我执行相同的活动但是将数据添加到字段中,那么一切正常。不是答案。只是一些信息。