好吧,这很奇怪。
在 XPage 中,我的数据源是一个 Java 对象。托管 bean 或 PageController。我通过 Ext 来使用引导程序。图书馆。
我想要做的是将所有验证代码保留在 Java 对象中,而不是将任何内容附加到 XPage 上的控件。在 java 对象内部,我可以通过以下方式添加任何错误消息:
FacesContext.getCurrentInstance().addMessage
因此任何错误都可以通过控件显示。
但如果我想向特定(单个)控件发送消息,我不知道该怎么做,以单个控件为目标。
实际上,我希望能够将此示例用于引导字段自定义控件:http://www.bootstrap4xpages.com/bs4xp/demos.nsf/reusableFields.xsp
并从我的 Java 类中设置 isValid 方法,以便引导字段通过 has-error 样式呈现为红色。
任何有关如何获取自定义控件内输入控件的 isValid 的建议,甚至是让我通过 java 进行验证但控制字段样式的替代方法,我们将不胜感激。
Thanks
我所做的是为组件使用自定义验证器。例如,
<xp:this.validators>
<xp:customValidator validate="#{javascript:controller.validateDuration(this)}"></xp:customValidator>
</xp:this.validators>
在我的控制器类中:
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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)