gpt4 book ai didi

java - 如何使用 XPages Java 代码在自定义控件中设置输入控件的有效方法?

转载 作者:搜寻专家 更新时间:2023-11-01 03:03:43 26 4
gpt4 key购买 nike

好吧,这很奇怪。

在 XPages 中,我的数据源是一个 Java 对象。托管 bean 或 PageController。我正在通过 Ext 使用 Bootstrap 。图书馆。

我想做的是将所有验证代码保存在我的 Java 对象中,而不是将任何内容附加到 XPage 上的控件。在 java 对象中,我可以通过以下方式添加任何错误消息:FacesContext.getCurrentInstance().addMessage

因此任何错误都可以通过控件显示。

但是如果我想向特定(单个)控件发送消息,我不知道该怎么做是针对单个控件。

实际上,我希望能够将此示例用于 Bootstrap 字段自定义控件:http://www.bootstrap4xpages.com/bs4xp/demos.nsf/reusableFields.xsp

并从我的 Java 类中设置 isValid 方法,以便通过 has-error 样式将 Bootstrap 字段呈现为红色。

任何有关如何在自定义控件内获取输入控件的 isValid 的建议,甚至是让我通过 java 验证但控制字段样式的替代方法的任何建议。

谢谢

最佳答案

我所做的是为组件使用自定义 validator 。例如,

<xp:this.validators>
<xp:customValidator validate="#{javascript:controller.validateDuration(this)}"></xp:customValidator>
</xp:this.validators>

在我的 Controller 类中:

public void validateDuration(UIComponent source) {
// Do my checks...
// If fails,
BeanUtils.setControlInvalid(source, "Format Error at date time!");
}

使特定组件无效并生成验证错误消息的 BeanUtils 方法:

public static void setControlInvalid(UIComponent editableComponent, String message) {
if(StringUtil.isEmpty(message) || editableComponent==null) return;

if(editableComponent instanceof EditableValueHolder) {
((EditableValueHolder) editableComponent).setValid(false);
postFacesMessage(editableComponent, FacesMessage.SEVERITY_ERROR, message);
}

}

public static void postFacesMessage(UIComponent component, Severity severity, String msg) {
if(StringUtil.isEmpty(msg) || component==null) return;

FacesContext fc=FacesContext.getCurrentInstance();

FacesMessage message=new FacesMessage(severity, msg, msg);
fc.addMessage(component.getClientId(fc), message);
}

关于java - 如何使用 XPages Java 代码在自定义控件中设置输入控件的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29847441/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com