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>

投稿の長さを短くするために、viewstate の隠しフィールドから値を意図的に削除しました。

なぜこれが起こっているのか、どうすればそれを克服できるのか、誰か説明してもらえますか?

前もって感謝します

4

1 に答える 1

0

Richfaces (a4j) は常に完全な html レスポンスを返します。返された後、ajax-update-id を使用して応答をパーツに分割し、rerender 属性の定義済み ID がある場所に配置します。

再レンダリングするものを何も指定していないため、js のみを oncomplete で実行する必要があります。

a4jリクエスト中に直接新しい画像をフェッチして再レンダリングを使用することができます(ページはimgタグとランダムなsrcを使用して準備する必要があります)、またはoncompleteコールバックでこれを実行して新しいimgを作成するように指定しましたタグを付けて自分で配置します。

2 番目のアプローチは注意が必要です。たとえば、Seam で会話を使用していると仮定すると、サーバーの状態が次のリクエストで調整されないためです。

于 2013-01-03T09:47:07.737 に答える