我正在使用SEAM - JSF框架
我在xhtml页面上关注了a4j commandlink。
<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>
我故意从viewstate隐藏字段中删除了值以减少 帖子的长度。
任何人都能解释我为什么会这样,以及如何克服它。
提前致谢
答案 0 :(得分:0)
Richfaces(a4j)总是会给你一个完整的HTML回复。返回后,它将使用ajax-update-id将响应拆分为多个部分,并将它们放在您具有rerender属性的已定义ID的位置。
你没有指定任何重新渲染的东西,因此只有你的js应该被执行完整。
您可以直接在a4j请求期间获取新图像并使用rerender(您的页面需要为img标记和我想的随机src准备)或者您在完成后的回调中执行此操作并创建一个新的img标签并自己放置。
第二种方法可能很棘手,因为假设您在接缝中使用对话,服务器状态将不会在下一个请求中对齐