在我的应用中,我的无线电组具有标签|别名值。
在读取模式下,我想在编辑框控件中显示它们并设置readonly属性。控件具有与Java类的数据绑定,例如value =“#{matterBean.matter.idType}”
如何最好地将别名转换为值?
关键字现在存储在Notes文档中。
我应该构建某种转换器类并为编辑框控件定义一个自定义转换器吗?
示例代码:
<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>
答案 0 :(得分:0)
“计算字段”组件也可以工作。而不是自定义转换器(假设这是唯一使用它的地方),我将设置一个rendered属性并在Java类中使用自定义方法,例如getIdTypeValues()
并映射到该位置。请记住,它仅在读取模式下使用,您可以使用UIViewRootEx2 view = (UIViewRootEx2) resolveVariable("view");if (view.isRenderingPhase()) {....}
来简化该方法。这样,它将仅在RENDER RESPONSE阶段运行一次。
答案 1 :(得分:0)
我试图重现您遇到的问题,但是我误解了它,或者您的问题还在继续,因为它对我来说可以正常工作。如果考虑此暂存代码,则有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>