4

わかりました。これをできるだけ短く、わかりやすくするようにします。

JQueryフルカレンダーを使用して、ユーザーにイベントを表示しています。ページにフィルターアクションがあり、ユーザーはさまざまな基準に基づいて表示されるイベントをフィルターできます。それらの基準の1つは、イベント名です。最終的な目標は、フィルターを取得して、フルカレンダービューから選択可能な「イベント名」オプションを再ロードすることです。

私はこれをすべて機能させていますが、同期していません。

フィルタを含めるJSPは次のよ​​うになります。

<div id="popUpFilterInfo" class="filterPopUp">      
<s:action name="ScheduleFilter" executeResult="true" id="scheduleFilter"></s:action>        
</div>

これにより、フィルタフォームを含む別のJSPページが返されます。Strutsはページのレンダリング時に実行されるため、このフィルターはビューが作成される前に作成されます。このフィルターは、ユーザーがボタンを選択すると、jQueryで非表示/表示されます。

このフィルターアクションは複数のページに含める必要があるため、ページアクションはフィルターアクションとは異なります。

フルカレンダーが読み込まれると、日付がページアクションに返され、アプリケーションのグローバルコンテキストのフィルターオブジェクトにそれらの日付が格納されます。

私が遭遇している問題は、ビューが変更されたときにページにフィルターだけをリロードさせることができないことです。ページ全体をリロードすると、フィルターには前のビューのデータが含まれているので、ScheduleFilterフォームを再レンダリングするようにページに指示するだけでよいことがわかります。私はjQueryでこれをやろうとしました:

var filter = "<s:action name=\"ScheduleFilter\" executeResult=\"true\" id=\"scheduleFilter\"></s:action>";
jQuery('#popUpFilterInfo').children().remove();
jQuery('#popUpFilterInfo').append(filter);  

これにより、フィルター変数がインスタンス化されている行に「引用符が必要です」というJasperExceptionがスローされます。「名前」の真ん中に文字「m」を指定するのが問題です。

ページ全体をリロードせずに、このような埋め込みアクションをリロードする方法を知っている人はいますか?

答え

<s:action>デイブが以下に述べたように、タグにアクションを埋め込まないでください。これを切り替えて、代わりにAjaxでアクションを呼び出し、成功したら、jQueryを使用して返されたデータをフィルターフォームdivに挿入します。divが空かどうかを確認するためのチェックを入れ、すでにフィルターが含まれている場合はdivをクリアします。例を以下に示します

私のフィルターdiv:

<div id="popUpFilterInfo" class="filterPopUp"></div> 

アクションコール:

function loadFilter() {
    if(!jQuery('#popUpFilterInfo').is(':empty')){
        jQuery('#popUpFilterInfo').children().remove();         
    }
    jQuery.ajax({
        url:'Filter.action',
        data:"",
        dataType: "",
        type: "GET",
        success: function(filter) {
            jQuery('#popUpFilterInfo').append(filter); 
        }
    });
}
4

1 に答える 1

1

@ Nathan24 に代わって、この回答を投稿しています。

Dave が以下で述べたように、アクションをタグに埋め込まないでください。これを切り替えて、代わりに Ajax でアクションを呼び出し、成功したら jQuery を使用して、返されたデータをフィルター フォーム div に挿入します。div が空かどうかをチェックして、既にフィルターが含まれている場合は div をクリアします。例を以下に示します

私のフィルターdiv:

<div id="popUpFilterInfo" class="filterPopUp"></div> 

アクション コール:

function loadFilter() {
    if(!jQuery('#popUpFilterInfo').is(':empty')){
       jQuery('#popUpFilterInfo').children().remove();         
  }
    jQuery.ajax({
       url:'Filter.action',
       data:"",
       dataType: "",
       type: "GET",
       success: function(filter) {
           jQuery('#popUpFilterInfo').append(filter); 
    }
});
 }

これは、他の人がこれを回答として投稿するのに役立つかもしれないと思ったので、人々はこの質問を見逃すことはありません. 私が間違っている場合は、この回答を削除することをお知らせください。ありがとうございました。

于 2014-01-08T01:49:18.120 に答える