1

我有一个 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 称为. 但有时,在页面重新加载后,我看不到我的踪迹,监听器永远不会被调用。我总是有Detected Ajax ResourceRequest跟踪,但在 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>
4

0 回答 0