我在托管 bean 方法中使用了 RequestContext 的 primeFaces 对象,以便从服务器端执行一些 javascript。我曾经在一个 Listener 处理程序方法(一个使用 AjaxBehaviourEvent 参数处理来自f:ajax
标签的请求的方法)中执行此操作,它可以工作,但这次我使用了一个没有任何参数的方法。
问题是我用 jquery .append() 附加了一些 html 并且必须使用 jquery ajax 从添加的元素向服务器发送请求(我不能附加任何 jsf 组件,因为它们不会工作,因为它们不是由 jsf 生成的本身)所以我不得不使用不带参数的 bean 方法,并从处理 ajax comming resquests 的 servlet 调用该方法。
为了更详细地解释这一点,假设我以这种方式使用 jquery 添加 html 代码:
$('#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;
}
}
有没有办法让它在任何地方工作?
干杯!