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

好的,这是一个奇怪的。

在XPages中,我的dataSource是一个Java对象。 Managed bean或PageController。 我正在通过Ext使用bootstrap。 图书馆。

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

所以任何错误都可以通过控件显示出来。

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

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

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

有关如何在自定义控件内获取输入控件的isValid的任何建议,或者甚至是让我通过javavalidation但控制字段样式的替代方法,我们将不胜感激。

谢谢

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

   

在我的控制器类中:

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

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

 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); } 

任何UIComponent都有一个setValid(boolean)方法。 所有控件还具有binding属性,可用于将该组件绑定到Java对象,例如bean中的属性。

但是,如果多次使用自定义控件,则无法使用它,因为所有实例都会尝试绑定到同一个bean属性。

但是,有点狡猾的想法,可以利用相同的概念。 如果您的bean具有Map myCunningBindings ,则可以使用加载属性中的此代码动态添加绑定集合:

   

因此代码的第一行获取地图并添加一个元素。 该元素具有值(组件本身)和标签。 对于标签,我们得到您也可能通过compositeData传入的字段映射。 最后,我们回归真实。

进行validation的bean应该知道将它保存到的位置,因此您应该能够计算传递给compositeData的字段映射,这将是您需要在Map中查找的键。 从那里,你有组件来调用setValid(false)。