- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在我基于 JSF 2 的应用程序中,我有一个包含(在其他 UI 组件中)一些复选框的表单。
在复选框上,我注册了 ajax 请求,当它们被选中时会触发。 ajax 请求实际上只会更新辅助 bean 中另一个复选框的值。因此,其他复选框也将被选中(当它被重新呈现时 - 因为它将在呈现响应阶段从支持 bean 获取更新的值)。
在提交整个表单并发生验证错误之前,这一切正常。然后 ajax 请求仍然有效并更改支持 bean 上的值,但是在重新呈现更新的复选框的阶段,它的值不是从支持 bean 中获取的,而是从 ComponentStateHelper 中获取的缓存值中获取的
类。
据我了解,这用于 JSF 2 的新功能,仅存储对组件树的部分更改。
我不明白的是:这与验证阶段有什么关系?当验证发现错误时,为什么我的复选框的 StateHelper
类中有一个缓存值?
最佳答案
这是一个已知问题,并在 this answer 中进行了深入解释。 .简而言之,问题是由 <f:ajax render>
渲染的无效组件引起的。但未被 <f:ajax execute>
执行与原始提交值一起保持无效状态。当 JSF 渲染输入组件时,JSF 会首先检查提交的值是否不是 null
然后显示它,否则它会显示模型值。您基本上需要重置要呈现但未被 ajax 执行的输入组件的提交值。
为此,您可以使用 ActionListener
基本上做以下事情:
UIViewRoot viewRoot = context.getViewRoot();
PartialViewContext partialViewContext = facesContext.getPartialViewContext();
Set<EditableValueHolder> inputs = new HashSet<EditableValueHolder>();
// First find all to be rendered inputs and add them to the set.
findAndAddEditableValueHolders(partialViewContext.getRenderIds(), inputs);
// Then find all executed inputs and remove them from the set.
findAndRemoveEditableValueHolders(partialViewContext.getExecuteIds(), inputs);
// The set now contains inputs which are to be rendered, but which are not been executed. Reset them.
for (EditableValueHolder input : inputs) {
input.resetValue();
}
这已报告为 JSF issue 1060并在 OmniFaces 中实现了一个完整且可重用的解决方案库为 ResetInputAjaxActionListener
(源代码 here 和展示演示 here)。
关于java - 验证错误后,后续的 ajax 请求从 UI 组件而不是 Bean 获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10723133/
这个问题在这里已经有了答案: final keyword in method parameters [duplicate] (9 个回答) 关闭 8 年前。 在此示例中,声明 Object fina
我的目标:是通过我的函数更新字段获取选定值并使用函数输出值运行它。 问题:当我从列表中选择值时,它不会触发函数,也不会更新字段。 感谢您的帮助。 HTML 12 14 16 18 20 22 24
我有一本具有这种形式的字典: myDict = {'foo': bar, 'foobar baz': qux} 现在,我想拆分字典键中的空格,使其成为下一个键并获取值(重复)。 myDictRev1
vector a; vector b; int temp_holder; cout > temp_holder) a.push_back(temp_holder); cout > temp_h
Java 的开发过程中免不了与 Date 类型纠缠,准备总结一下项目经常使用的日期相关操作,JDK 版本 1.7,如果能够帮助大家节约那么几分钟起身活动一下,去泡杯咖啡,便是极好的,嘿嘿。当然,我
我正在使用 jquery ui 日期选择器来获取 fromDate 和 toDate 以下是from日期的代码 $("#from_date").datepicker({
我是一名优秀的程序员,十分优秀!