以下のように af:ajax を使用した h:commandLink があります。
<h:commandLink id="submitAjaxSearch" value="Submit Search" >
<f:ajax execute="searchForm" listener="#{dcjsEarthSearchBean.doAjaxSearch}"
render="searchForm" onevent="handleOutcome" onerror="handleError"/>
</h:commandLink>
バッキング Bean メソッド doAjaxSearch がトリガーされ、エラーはスローされず、フォームの値が更新されていることがわかります。
public void doAjaxSearch(AjaxBehaviorEvent event){
doSearch();
}
検索を行うと、いくつかのダミー値が作成され、それらがパイプで区切られた文字列に入れられます。値は Google マップの目印に変換されます。これは、ページが検索ページから正常に読み込まれるときに機能します。しかし、マップ ページには、ユーザーが検索を絞り込むために使用できるフォームがあり、上記のコードのコマンド リンクをクリックして ajax 検索を実行できます。JavaScriptは次のようになります
function handleOutcome(data){
var status = data.status; // Can be "begin", "complete" or "success".
switch (status) {
case "begin": // Before the ajax request is sent.
alert("begin");
break;
case "complete": // After the ajax response is arrived.
alert("complete");
break;
case "success": // After update of HTML DOM based on ajax response..
alert("success");
break;
}
}
function handleError(data){
alert(data.status);
}
commandLink をクリックすると、「begin」というアラートが表示され、Eclipse のコンソールでバッキング Bean コードが実行されていることがわかります。次に、「complete」というアラートが表示され、「clientError」というアラートが表示されます。イベントがトリガーされます。問題は、特定のクライアント エラーが何であるか、またはそれを取得する方法がわからないことです。問題は、フォームがトマホークのタブ付きペイン内にあり、部分的な更新により、トマホークが独自に作成した囲みフォーム名が失われていることだと思いますか? すべて一緒ではありません。しかし、Firebug では、handleError 部分のデータ オブジェクトに監視を設定し、これを含むものを取得します。
responseXML
Document
serverErrorMessage
"C._mfInternal is undefined"
serverErrorName
"TypeError"
source
a#j_id_b:searchForm:submitAjaxSearch #
status
"clientError"
type
"error"
data
Object { type=
"error"
, status=
"clientError"
, serverErrorName=
"TypeError"
, more...}
「C._mfInternal is undefined」が問題の核心だと思います。しかし、それが何なのかわからず、ページのソースを表示してもその名前が見つかりません。このような問題を見た人はいますか?