我使用的RequestContext的primeFaces在託管bean方法對象,以便從服務器端執行一些javascript。我以前做這個監聽處理方法(從f:ajax
標籤的AjaxBehaviourEvent參數處理請求的方法)內,它的工作原理,但這個時候,我使用的方法不帶任何參數。顯示java.lang.NullPointerException在org.primefaces.context.RequestContext.getCurrentInstance
問題是,即時追加一些html與jquery .append()和不得不使用jquery ajax從添加元素髮送請求到服務器(我不能追加任何jsf組件,因爲它們不會工作,因爲它們是不是由jsf本身生成的),所以我必須使用不帶參數的bean方法,並從處理ajax來處理resquest的servlet調用該方法。
解釋這個更詳細,假設我添加HTML代碼與jQuery這樣:
$('#substartmenudiv').append('<div id="congesdiv" />');
然後添加必須執行一次新增加的div被點擊代碼:
$('#congesdiv').click(function(){
$.post('AjaxRelaisServlet',{action:"setstrtmenustatus",startmenuisopen:startmenuisopen});
});
和從servlet我趕由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;
}
}
有沒有辦法讓它在任何地方工作?
喝彩!
請張貼代碼,解釋你想在AJAX請求做什麼,你要調用的方法。 – partlov
Hi BalusC !!我需要你爲我剛纔的問題請http://stackoverflow.com/questions/15691240/servlet-3-0-doesnt-work – Bardelman
我知道其他一些方法可以使獲得相同的結果,但我需要更多的控制從服務器端的視圖,因爲我將需要保存數據庫中的HTML組件css屬性。其實我需要這種方式來工作,因爲我將來需要更多的東西。 – Bardelman