gpt4 book ai didi

java - 如何遍历屏幕上显示的所有组件

转载 作者:太空宇宙 更新时间:2023-11-04 08:49:05 24 4
gpt4 key购买 nike

我有一个高度动态的单页界面,其中各种用户事件触发新字段显示在屏幕上。我正在使用 jsf 1.1 和基本 ajax,无法使用部分提交。由于这些限制,我已将所有字段标记为“required false”和“immediate false”。这个想法是仅当用户尝试在操作方法中转换到下一页时进行验证,而不是在他们关闭并执行 ajax 事件时进行验证。我设置立即为 false,因为我需要输入才能使其进入模式,以便我可以根据业务逻辑有条件地呈现某些字段。

问题:我提前知道“可能的”UIInput id 列表,这些 ID 在任何给定时间可能会也可能不会显示在屏幕上。我的目标是迭代所有这些 UIInput,检查它们是否已渲染、不为 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;
}

最佳答案

您需要注意,在表单提交请求期间,与初始显示期间一样,会保留负责 rendered 属性结果的完全相同的条件。

最简单的方法是将负责 session 范围内的条件的 bean 放在其中。如果您希望将其放在请求范围内(这是一个非常合理的决定),那么我建议抓取 Tomahawk's t:saveState为此。

<t:saveState value="#{bean}" />

也就是说,您考虑过 Ajax4jsf 吗?它与 JSF 1.1 兼容,并提供 Ajax 与 JSF 的透明集成。

关于java - 如何遍历屏幕上显示的所有组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3743783/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com