我在使用一个表单,保存数据的时候,在填写表单,和保存的时候出现异常 :
PropertyNotFoundException Target Unreachable, identifier resolved to null
这个很奇怪,因为在EL中引用的对像肯定是存在的,而且是对话作用域的,而且每次说不存在的又不是固定的对象。后来在各个edit中切换的快(我的输入域中有A4j supper),就会出这个导常。
后来在Seam in Action中找到了答案,和解决办法:
原因: 在A4j中,ajax请求是乱序到达服务器的,这样会造成,各AJAX请求及AJAX请求和非AJAX请求之间争夺对话的控制权,当多个AJAX请及非AJAX请求同时到达服务器时后到的请求将无法得到对话的控制权只到request超时,这个后到的请求就会抛出这个异常。
解决:为A4j加入eventsQueue 属性,此属性可让A4j请求加入一个对列,以避免发生多个请求同时到达服务器,这样可以解决多个AJAX请及之间争夺对话的控制权的问题,列如:
<a:support event="onblur" reRender="commentField" bypassUpdates="true" ajaxSingle="true" eventsQueue="foo"/>
对于AJAX请求和非AJAX请求之间争夺对话的控制权的问题,可设置请求超时时间来解决,在Seam中 :
<core:manager concurrent-request-timeout="500" .../>