问题是:
<p:ajax event="select" listener="#{bean.onSelect}" oncomplete="xxx(#{bean.m})" />
事件处理程序select从所选元素中检索参数m,然后函数接受该参数xxx。但是,正如你所理解的,oncomplete它被调用得更早,并且字段m被拉空了。如何解决这个问题?有没有可能以某种方式抛出jsf中的select事件,然后直接转到客户端?还是有更优雅的解决方案?
问题是:
<p:ajax event="select" listener="#{bean.onSelect}" oncomplete="xxx(#{bean.m})" />
事件处理程序select从所选元素中检索参数m,然后函数接受该参数xxx。但是,正如你所理解的,oncomplete它被调用得更早,并且字段m被拉空了。如何解决这个问题?有没有可能以某种方式抛出jsf中的select事件,然后直接转到客户端?还是有更优雅的解决方案?
处理程序的内容
oncomplete在字段的实际值出现之前被填充m,或者更准确地说,EL 表达式是在组件呈现(呈现)的时刻处理的,而不是在“select”事件触发的时刻处理的。这个问题的解决方案取决于具体的目标。也许没有必要从 bean 中获取一个字段
m,并在onSelectbean 方法中完成所有操作。如果在客户端你仍然需要从 bean 中获取数据,那么你应该将它放在页面上
h:inputHidden/h:outputText带有指向所需字段的链接,并在事件发生后更新它。该字段值将在脚本被调用时可用oncomplete,剩下的就是使用 javascript 获取该值。好吧,因为你使用的是 Primefaces,你可以从你的处理程序中执行 javascript
通过这种简单的方式,脚本将被传输到客户端执行。当然,处理完成后会发生什么。
并进一步。
oncomplete不是在处理程序之前调用,而是在处理程序之后调用。 https://stackoverflow.com/questions/20146630/execution-order-of-events-when-pressing-primefaces-pcommandbutton唯一的问题是它
m确实具有呈现页面时的旧值。并且通过这种方式新选择m的不能转移到脚本中。如果不需要服务端的选择处理,那么可以看组件的客户端api。也许有用于提取元素的客户端事件和 api。