1

我正在使用 SEAM - JSF 框架

我的 xhtml 页面上有以下 a4j 命令链接。

<a4j:commandLink id="rateImage" action="#{ratingSessionAction.rateImage}" oncomplete="getNewImageForSlider();"/>

当我在清除浏览器历史记录后第一次单击此链接时,我得到以下 html

 <?xml version="1.0"?>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<link class="component"
    href="/abc/a4j/s/3_3_3.Finalorg/richfaces/renderkit/html/css/basic_classes.xcss/DATB/eAELXT5DOhSIAQ!sA18_"
    rel="stylesheet" type="text/css" />
<link class="component"
    href="/abc/a4j/s/3_3_3.Finalorg/richfaces/renderkit/html/css/extended_classes.xcss/DATB/eAELXT5DOhSIAQ!sA18_"
    media="rich-extended-skinning" rel="stylesheet" type="text/css" />
<script
    src="/abc/a4j/g/3_3_3.Finalorg.ajax4jsf.javascript.AjaxScript"
    type="text/javascript">

</script>
<script
    src="/abc/a4j/g/3_3_3.Finalorg/ajax4jsf/javascript/scripts/form.js"
    type="text/javascript">

</script>
<script
    src="/abc/a4j/g/3_3_3.Finalorg/richfaces/renderkit/html/scripts/skinning.js"
    type="text/javascript">

</script>
</head>
<body>
    <meta name="Ajax-Update-Ids" content="" />
    <span id="ajax-view-state"><input type="hidden"
        name="javax.faces.ViewState" id="javax.faces.ViewState"
        value="" />
    </span>
    <meta id="Ajax-Response" name="Ajax-Response" content="true" />
    <span id="org.ajax4jsf.oncomplete">getNewImageForSlider();</span>
</body>
</html>

我故意从视图状态隐藏字段中删除值以减少帖子的长度。

谁能解释我为什么会发生这种情况,以及如何克服它。

提前致谢

4

1 回答 1

0

Richfaces (a4j) 总是返回一个完整的 html 响应。返回后,它将使用 ajax-update-id 将响应拆分为多个部分,并将它们放置在您定义了 rerender 属性的 id 的位置。

您没有指定要重新渲染的任何内容,因此只有您的 js 应该在完成时执行。

您可以在 a4j 请求期间直接获取新图像并使用重新渲染(您的页面需要准备好使用 img 标签和随机 src 我想)或者您在 oncomplete 回调中执行此操作并创建一个新的 img标记并自己放置。

第二种方法可能会很棘手,因为服务器状态不会在下一个请求中对齐,例如假设您在 seam 中使用对话

于 2013-01-03T09:47:07.737 回答