Xpages绑定到javabean的可重用引导字段:验证

Xpages绑定到javabean的可重用引导字段:验证,xpages,Xpages,我发现了一个引导可重用字段自定义控件,并一直在我的最新项目中使用它。它工作得很好,但是验证是由SSJS在Xpage中完成的。接下来,我将尽可能多地从Xpage中进行编程,并将其移植到javabean中 我在bean中进行了验证,但它将错误放在表单顶部的displayerrors控件中。我希望Java验证使用引导样式错误 我发现在网上进行了一次很好的讨论 StackOverflow中的另一个问题是,我无法找出如何使其工作 这是CC字段 以及带有控件的简单Xpage的代码: 要将错误消息传

我发现了一个引导可重用字段自定义控件,并一直在我的最新项目中使用它。它工作得很好,但是验证是由SSJS在Xpage中完成的。接下来,我将尽可能多地从Xpage中进行编程,并将其移植到javabean中

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

我发现在网上进行了一次很好的讨论

StackOverflow中的另一个问题是,我无法找出如何使其工作

这是CC字段


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



要将错误消息传递到特定字段,我有一个实用方法,找到该字段,然后将错误添加到引用clientId的FacesContext中,该clientId是通过findComponent方法找到的

publicstaticvoidaddmessagetospecificfield(stringfieldid,stringmessage){
字符串clientId=JSFUtil.findComponent(fieldId).getClientId(
JSFUtil.getFacesContext());
JSFUtil.getFacesContext().addMessage(clientId,
新javax.faces.application.FacesMessage(消息));
}
/** 
*通过当前文件中的组件标识符查找UIComponent
*组件树。
* 
*@param compId要搜索的组件标识符
*@return找到UIComponent或null
* 
*@如果
compId
为空,则引发NullPointerException */ 公共静态UIComponent findComponent(字符串compId){ 返回findComponent(FacesContext.getCurrentInstance().getViewRoot(),compId); } /** *通过组件树中的组件标识符查找UIComponent *在指定的
topComponent
top component下方。 * *@param topComponent第一个要检查的组件 *@param compId要搜索的组件标识符 *@return找到UIComponent或null * *@如果
compId
为空,则引发NullPointerException */ @抑制警告(“未选中”) 公共静态UIComponent findComponent(UIComponent topComponent,字符串compId){ if(compId==null) 抛出新的NullPointerException(“组件标识符不能为null”); if(compId.equals(topComponent.getId())) 返回顶部组件; 如果(topComponent.getChildCount()>0){ List childComponents=topComponent.getChildren(); 对于(UIComponent currChildComponent:childComponents){ UIComponent foundComponent=findComponent(currChildComponent,compId); if(foundComponent!=null) 返回组件; } } 返回null; }
在自定义控件包括和之外定义objectData 将属性dataSource设置为objectData的变量PCModel:
dataSource=“#{PCModel}”


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

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

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

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

类com.scoular.data.pc有属性模型吗?是的。也许这不是一个好的字段名?也许model是一个保留字,比如viewNo,我不认为这是问题所在,因为我已经使用这个属性很长时间了,没有遇到任何问题。此外,如果我使用不同的字段名,我仍然会得到错误,但会使用另一个字段名。所以我有一个属性officeLoc,如果我把它放在那里,我会得到相同的消息,但是使用officeLoc而不是model.Knut,为什么你认为原始代码不会返回实例?我认为使用这种方法没有问题。谢谢@David:如果create()有最后一行
返回它,它就可以工作。不过我看到了实现
public void create()
,谢谢。好的,我明白了。我没有注意到Bryan的原始代码只使用了一行。是的,如果create()返回一个void,那么它需要在单独的一行上,但将其拆分为两行也可以。呸。我在那里有点困惑。:)