如何使用别名和 xpages 控件?

Working with aliases and xpages control, how to?

在我的应用程序中,我有具有标签|别名值的无线电组。

在阅读模式下,我想在编辑框控件中显示它们并设置只读属性。该控件具有到 java classes 的数据绑定,例如值="#{matterBean.matter.idType}"

如何才能最好地将别名转换为值?

关键字现在存储在 Notes 文档中。

我是否应该构建某种转换器-class 并为编辑框控件定义一个自定义转换器?

示例代码:

<xp:radioGroup 
                        id="rgRelStudy"
                        value="#{matterBean.matter.busStudy}"
                        disabled="#{!matterBean.matter.editable}"
                        styleClass="radio-spacing" readonly="true">
                        <xp:this.defaultValue><![CDATA[#{javascript:getKeywordDefault("intakeStudy")}]]></xp:this.defaultValue>

                        <xp:selectItems>
                            <xp:this.value><![CDATA[${javascript:return getKeywordValues("intakeStudy");}]]></xp:this.value>
                        </xp:selectItems>
                        <xp:eventHandler event="onclick" submit="true"
                            refreshMode="partial" refreshId="pnlUpdate">
                            <xp:this.script><![CDATA[var e = arguments[0] || window.event;
e = dojo.fixEvent(e);
if (e.target.type != "radio") {
    e.preventDefault();
    dojo.query("input",e.target).forEach(function(inputNode){
        dojo.attr(inputNode,"checked",!(dojo.attr(inputNode,"checked")));
    });
}
return true;]]></xp:this.script>
                            <xp:this.onComplete><![CDATA[XSP.partialRefreshGet('#{id:pnlCollegeContainer}', {
    onComplete: function () {
        XSP.partialRefreshGet('#{id:pnlResidenceContainer}');
    }
});]]></xp:this.onComplete>
                        </xp:eventHandler>
                    </xp:radioGroup>

计算字段组件也可以。而不是自定义转换器(假设这是唯一使用它的地方),我会设置一个呈现的 属性 并在 Java class 中使用自定义方法,例如getIdTypeValues() 并映射到那个。请记住,它仅用于读取模式,您可以使用 UIViewRootEx2 view = (UIViewRootEx2) resolveVariable("view");if (view.isRenderingPhase()) {....} 对方法进行样板化。这样它只会 运行 一次,在 RENDER RESPONSE 阶段。

我试图重现您遇到的问题,但要么是我误解了它,要么是您那边发生了其他事情,因为它对我来说是按预期工作的。如果你考虑这个临时代码,你有 2 个按钮可以打开或不打开无线电组只读模式。在只读模式下,仅显示与选中值关联的标签,而不显示其他标签。

<xp:view xmlns:xp="http://www.ibm.com/xsp/core" style="padding: 20px"
    beforePageLoad="#{javascript:viewScope.readonly=false}">

    <xp:div id="theThing">
        <xp:button value="Make readonly" id="buttonReadOnly"
            rendered="#{not viewScope.readonly}">
            <xp:eventHandler event="onclick" submit="true"
                execMode="partial" refreshMode="partial" refreshId="theThing"
                action="#{javascript:viewScope.readonly=true}" />
        </xp:button>

        <xp:button value="Make editable" id="buttonEditable"
            rendered="#{viewScope.readonly}">
            <xp:eventHandler event="onclick" submit="true"
                execMode="partial" refreshMode="partial" refreshId="theThing"
                action="#{javascript:viewScope.readonly=false}" />
        </xp:button>

        <hr />

        <xp:radioGroup id="rgRelStudy" value="#{viewScope.relStudy}"
            styleClass="radio-spacing" readonly="#{viewScope.readonly}"
            defaultValue="o">
            <xp:selectItems value="${javascript:['apple|a', 'orange|o', 'banana|b']}" />

            <xp:eventHandler event="onclick" submit="true"
                execMode="partial" refreshMode="partial" refreshId="pnlUpdate" />
        </xp:radioGroup>
    </xp:div>

    <hr />

    <xp:div id="pnlUpdate">
        <h3>The radio value (not label)</h3>
        <xp:text value="#{viewScope.relStudy}" />
    </xp:div>

</xp:view>