我所做的是使用組件的自定義驗證程序。例如,
<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);
}
謝謝Serdar。我正在消化這個。我並不確定如何將這個與編輯控件一起用於自定義控件中。我想我必須以某種方式計算ID,但我不確定。我確實認爲我可能有一個現在正在嘗試的替代方法。 –