绑定(bind)到 java bean 的 Xpages 可重用引导字段 : validation

标签 xpages

我发现了一个 Bootstrap 可重用字段自定义控件,并已在我的最新项目中使用它。它运行良好,但验证是由 Xpage 内的 SSJS 完成的,今后我将尽可能多地从 Xpage 中移出编程并移至 java beans 中。

我在我的 bean 中进行了验证,但它会将错误放在表单顶部的显示错误控件中。我希望我的 Java 验证使用 Bootstrap 样式错误。

我在 BootstrapForXpages site 上找到了关于这样做的非常好的讨论。 .

StackOverflow 中的另一个问题 addressed this same issue但我不知道如何让它发挥作用。

How to use XPages Java code to set valid method of input control inside a custom control?

这是现场CC

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
    <xp:div>
        <xp:this.styleClass><![CDATA[#{javascript:"form-group" + ( getComponent("inputText1").isValid() ? "" : " has-error" )}]]></xp:this.styleClass>
        <xp:label styleClass="col-sm-2 control-label" for="inputText1"
            value="${compositeData.fieldLabel}" />
        <div class="col-sm-10">
            <xp:inputText type="text" id="inputText1"
                loaded="${!empty compositeData.placeholder}" value="#{compositeData.dataSource[compositeData.fieldName]}"
                required="${compositeData.required}">
                <xp:this.attrs>
                    <xp:attr name="placeholder" value="${compositeData.placeholder}" />
                </xp:this.attrs>
                <xp:this.validators>
                    <xp:validateRequired
                        message="#{javascript:compositeData.fieldLabel + ' is required'}" />
                </xp:this.validators>
            </xp:inputText>
            <xp:text escape="true" id="computedField1" styleClass="help-block"
                value="${compositeData.helpText}">
                <xp:this.rendered><![CDATA[#{javascript:getComponent("inputText1").isValid() && compositeData.helpText != null}]]></xp:this.rendered>
            </xp:text>
            <xp:message id="message1" for="inputText1" styleClass="help-block" />
        </div>
    </xp:div>
</xp:view>

以及带有控件的简单 Xpage 的代码:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
    xmlns:xc="http://www.ibm.com/xsp/custom"
    xmlns:xe="http://www.ibm.com/xsp/coreex">   
    <xc:ccCustomField placeholder="Enter your email address"
        fieldLabel="Email" helpText="Guess what you have to enter here..."
        fieldName="model">
        <xc:this.dataSource>
            <xe:objectData var="PCModel">
                <xe:this.createObject><![CDATA[#{javascript:var pc = new com.scoular.data.PC().create();
return pc;}]]></xe:this.createObject>
            </xe:objectData>
        </xc:this.dataSource>
    </xc:ccCustomField>
</xp:view>

I am getting this error for starters.

最佳答案

在自定义控件外部定义 objectData,包括和
将属性 dataSource 设置为 objectData 的变量 PCModel:dataSource="#{PCModel}"

<?xml version="1.0" encoding="UTF-8"?>
<xp:view
    xmlns:xp="http://www.ibm.com/xsp/core"
    xmlns:xc="http://www.ibm.com/xsp/custom"
    xmlns:xe="http://www.ibm.com/xsp/coreex">
    <xp:this.data>
        <xe:objectData
            var="PCModel">
            <xe:this.createObject><![CDATA[#{javascript:
                var pc = new com.scoular.data.PC();
                pc.create();
                return pc;
            }]]></xe:this.createObject>
        </xe:objectData>
    </xp:this.data>
    <xc:ccCustomField
        placeholder="Enter your email address"
        fieldLabel="Email"
        helpText="Guess what you have to enter here..."
        fieldName="model"
        dataSource="#{PCModel}">
    </xc:ccCustomField>
</xp:view>

因此,这不是 bean 的问题,而是为自定义控件设置 dataSource 属性的问题。

另外,要小心 bean 的 create() 方法。它可能不会返回 bean 的实例。如果是这种情况,那么你的代码行

var pc = new com.scoular.data.PC().create();

不会将 pc 设置为 PC 实例,数据源也不会正确初始化。

关于绑定(bind)到 java bean 的 Xpages 可重用引导字段 : validation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35897910/

相关文章:

css - Xpages:提前输入样式都被移动主题搞砸了

xpages - 将名称选取器的结果放入只读控件中

xpages - 在 XPage 中查看附件

css - 滚动自定义控件内容 - xpages

xpages - 去掉货币的小数部分

build - 在打开“自动构建”开关的情况下将 Jar 文件导入到 nsf 会导致重复构建

build - 为什么本地应用程序的构建时间受网络影响?

java - 通过 java 更新 Notes 文档

Java:将日期 2011-Jan-01 转换为 dd-MM-yyyy 格式

xpages - 通过自定义控件属性或自定义控件的自定义事件传递函数?