【发布时间】:2013-03-20 02:40:55
【问题描述】:
我在托管 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;
}
}
有没有办法让它在任何地方工作?
干杯!
【问题讨论】:
-
请发布代码,说明您想在该 AJAX 请求中做什么,以及您想调用的方法。
-
嗨 BalusC!我需要你回答我之前的问题,请查看stackoverflow.com/questions/15691240/servlet-3-0-doesnt-work
-
我知道可以采用其他一些方法来获得相同的结果,但我需要从服务器端对视图进行更多控制,因为我需要将 html 组件 css 属性保存在数据库中。实际上我需要这种方式来工作,因为我将来会更需要它。
-
这有点令人困惑。您是在 servlet 还是托管 bean 中访问
RequestContext? -
因为你可以看到 testcmdlink 是从 servlet 以静态方式访问的,当我在这里复制方法时忘记在方法中写“静态”,对不起。
标签: jsf jsf-2 primefaces managed-bean