我正在使用SEAM - JSF框架
我有以下a4j命令链接在我的xhtml页面。
<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隐藏字段中删除值以减少文章长度
谁能告诉我为什么会发生这种情况,以及如何克服它?
Thanks in advance
Richfaces (a4j)总是返回一个完整的html响应。返回后,它将使用ajax-update-id将响应分成几个部分,并将它们放置在具有呈现器属性定义的id的位置。
你没有指定任何渲染,因为只有你的js应该在完成时执行。
您可以在a4j请求期间直接获取新图像并使用渲染器(您的页面需要为此准备一个img标记和随机src,我假设),或者您可以在oncomplete回调中这样做,并创建一个新的img标记并将其放置在自己的位置。
第二种方法可能比较棘手,因为服务器状态不会在下一个请求中对齐,假设您在seam中使用会话,例如