如何使用别名和 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>
在我的应用程序中,我有具有标签|别名值的无线电组。
在阅读模式下,我想在编辑框控件中显示它们并设置只读属性。该控件具有到 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>