【发布时间】:2010-09-18 22:35:24
【问题描述】:
我有一个高度动态的单页界面,其中各种用户事件触发新字段显示在屏幕上。我正在使用 jsf 1.1 和基本 ajax,但无法使用部分提交。由于这些限制,我已将我的所有字段都标记为必需为假和立即为假。这个想法是仅在用户尝试在操作方法中转换到下一页时才进行验证,而不是在他们关闭并执行 ajax 事件时进行验证。我将立即设置为 false,因为我需要输入以使其进入模态,因此我可以根据业务逻辑有条件地呈现某些字段。
问题:我提前知道“可能的”UIInput id 列表,在任何给定时间可能会或可能不会显示在屏幕上。我的目标是遍历所有这些 UIInputs,检查它们是否被渲染,不为 null,不为空,否则将 UIInput 标记为错误。
这适用于屏幕上未显示的字段。例如,我有一个字段“amountInput”,它的 XHTML 呈现属性设置为 false,因此它不会显示在屏幕上。从显示的角度来看,这是可行的,但是在调用我的操作时,该字段仍将其渲染属性显示为 true,因此我无法知道是否应该验证它。
我有什么选择?
public boolean validate() {
boolean hasValidMinimumData = true;
final List<UIInput> componentList = getComponentList();
if (CollectionUtils.isNotEmpty(componentList)) {
for (UIInput curComponent : componentList) {
final Object curComponentValue = curComponent.getValue();
if (curComponent.isRendered() && (curComponentValue == null || isNoValue(curComponent))) {
setError(curComponent); // applies the error
hasValidMinimumData = false;
}
}
}
return hasValidMinimumData;
}
【问题讨论】: