Xpages:使用带有多个自定义控件实例的java bean进行验证

Bry*_*ler 2 custom-controls xpages

我有一个可编辑字段的自定义控件,验证是通过java bean完成的.我想设置isValid()属性来设置bootstrap样式,如下所示:

在此输入图像描述

但是,如果我将cc多次放在页面上,这不起作用,因为我正在搜索组件的ID以设置Valid属性.

我需要在CC中计算字段的id,或者像这篇文章所描述的那样做其他事情.

我相信我可以像这样计算文本字段的ID:

<xp:inputText
                id="${javascript:compositeData.fieldName}"
                type="text"
                loaded="${!empty compositeData.placeholder}"
                required="${compositeData.required}"
                disableClientSideValidation="true">
                <xp:this.attrs>
                    <xp:attr
                        name="placeholder"
                        value="${compositeData.placeholder}" />
                </xp:this.attrs>
                <xp:this.binding><![CDATA[#{javascript:compositeData.dataSource[compositeData.fieldName]}]]></xp:this.binding>
            </xp:inputText> 
Run Code Online (Sandbox Code Playgroud)

但是,我需要计算组件的一些地方,例如

<xp:this.styleClass><![CDATA[#{javascript:"form-group" + (getComponent("inputText1").isValid() ? "" : " has-error" )}]]></xp:this.styleClass>
Run Code Online (Sandbox Code Playgroud)

我必须用计算的ID替换"inputText1",但无法弄清楚如何这样做.

有更好/更简单的方法吗?

How*_*ard 5

为什么不在引用id的任何地方使用compositeData.fieldName?

<xp:this.styleClass><![CDATA[#{javascript:"form-group" + (getComponent(compositeData.fieldName).isValid() ? "" : " has-error" )}]]></xp:this.styleClass>
Run Code Online (Sandbox Code Playgroud)