サーバー側からいくつかの JavaScript を実行するために、マネージ Bean メソッドで RequestContext の primeFaces オブジェクトを使用しました。以前は Listener ハンドラー メソッド (f:ajax
タグからのリクエストを処理する AjaxBehaviourEvent パラメーターを持つメソッド) 内でこれを行っていましたが、これは機能しますが、今回はパラメーターなしのメソッドを使用しました。
問題は、いくつかの html を jquery .append() で追加し、jquery ajax を使用して、追加された要素からサーバーに要求を送信する必要があることです (jsf によって生成されないため、それらは機能しないため、jsf コンポーネントを追加できません)そのため、パラメーターなしで Bean メソッドを使用し、そのメソッドを ajax のリクエストを処理するサーブレットから呼び出す必要がありました。
これをさらに詳しく説明するために、次のように jquery を使用して html コードを追加するとします。
$('#substartmenudiv').append('<div id="congesdiv" />');
次に、新しく追加された div がクリックされたときに実行する必要があるコードを追加します。
$('#congesdiv').click(function(){
$.post('AjaxRelaisServlet',{action:"setstrtmenustatus",startmenuisopen:startmenuisopen});
});
サーブレットから、ajax リクエストによって送信されたパラメーターをキャッチし、Bean メソッドを呼び出します。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
boolean startmenuisopen= Boolean.valueOf(request.getParameter("startmenuisopen"));
UserBean.testcmdlink(startmenuisopen);
呼び出された testcmdlink Bean メソッドには、次のような RequestContext オブジェクトが含まれています。
public static void testcmdlink(boolean startmenuisopen){
RequestContext context = RequestContext.getCurrentInstance();
if(!startmenuisopen){
context.execute("$('#substartmenudiv').append('<div id="+"gestprofdiv"+" />');");
context.execute("displaymenuitems();");
context.execute("console.log('more elements are appended !!');");
startmenuisopen=true;
}else{
context.execute("$('#substartmenudiv').empty();");
context.execute("window['bottomvalue'] =30;");
context.execute("console.log('start menu div is emptied !!');");
startmenuisopen=false;
}
}
どこでも動作させる方法はありますか?
乾杯 !