我有一个jsf页面,其中包含使用Ajax调用搜索的链接。使用javascript自动点击该链接。该表单位于liferay中的一个portlet的几个实例中。通常情况下,一切都很好,但有时,监听器不会被调用。
在portlet中(我添加了第一次编辑中缺少的绑定属性):
<h:form id="result">
...
<h:commandLink id="launch" binding="#{resultBackingBean.launchSearch}">
<f:ajax event="click" render="errors content debug" listener="#{resultBackingBean.doSearch}" />
</h:commandLink>
...
</h:form>
当它工作时,我有以下痕迹:
12:55:10,476 DEBUG AFTER phaseId=[RESTORE_VIEW 1] viewId=[/views/search_result.xhtml]
12:55:10,476 DEBUG BEFORE phaseId=[APPLY_REQUEST_VALUES 2] viewId=[/views/search_result.xhtml]
12:55:10,476 DEBUG AFTER phaseId=[APPLY_REQUEST_VALUES 2] viewId=[/views/search_result.xhtml]
12:55:10,476 DEBUG BEFORE phaseId=[PROCESS_VALIDATIONS 3] viewId=[/views/search_result.xhtml]
12:55:10,476 DEBUG AFTER phaseId=[PROCESS_VALIDATIONS 3] viewId=[/views/search_result.xhtml]
12:55:10,486 DEBUG BEFORE phaseId=[UPDATE_MODEL_VALUES 4] viewId=[/views/search_result.xhtml]
12:55:10,486 DEBUG AFTER phaseId=[UPDATE_MODEL_VALUES 4] viewId=[/views/search_result.xhtml]
12:55:10,486 DEBUG BEFORE phaseId=[INVOKE_APPLICATION 5] viewId=[/views/search_result.xhtml]
12:55:10,486 DEBUG doSearch called
12:55:10,486 DEBUG AFTER phaseId=[INVOKE_APPLICATION 5] viewId=[/views/search_result.xhtml]
12:55:10,486 DEBUG BEFORE phaseId=[RENDER_RESPONSE 6] viewId=[/views/search_result.xhtml]
12:55:10,496 DEBUG AFTER phaseId=[RENDER_RESPONSE 6] viewId=[/views/search_result.xhtml]
我可以看到自己的调试跟踪 doSearch名为。但有时候,在页面重新加载后,我看不到我的踪迹,从不调用监听器。我总是有检测到的Ajax ResourceRequest 跟踪,但BEFORE INVOKE_APPLICATION和AFTER INVOKE_APPLICATION之间没有任何内容。
如果我希望页面再次运行,我必须重新加载它。好像有时在某些加载过程中出现了错误,因为只有在重新加载页面后行为才会发生变化。
我试图用doSearch改变bean的范围(从viewScope到sessionScope),我试图为f:ajax设置immediate =“true”,我试图使用a4j:ajax,但我仍然有相同的我不明白的行为......为什么? :(
修改:
有关信息,使用findbugs,我看到了ajax请求。在工作案例中,对要渲染的字段进行更新,在非工作情况下,使用几乎为空的部分响应:
<partial-response>
<changes>
<update id="javax.faces.ViewState">6791417547372597471:4319149946307207422</update>
</changes>
</partial-response>