我如何从JSF Bean调用JavaScript函数?

时间:2015-04-01 13:22:44

标签: javascript jsf

我需要从Java代码执行此操作,我尝试以下操作,但卡住了:

    UIOutput js = new UIOutput();
    js.setRendererType("javax.faces.resource.Script");
    js.getAttributes().put("library", "js");
    js.setValue("alert(123);");

    FacesContext context = FacesContext.getCurrentInstance();
    context.getViewRoot().addComponentResource(context, js, "body");

我在服务器日志中没有收到错误,但也没有看到警报。

有什么想法吗?

编辑:我尝试了建议的解决方案,涉嫌重复,我也没有收到服务器错误,但我也没有看到任何警告..

3 个答案:

答案 0 :(得分:2)

我假设您想要从JSF ManagedBean而不是JSF组件执行此操作。

我不确定是否存在'普通'jsf解决方案(意味着不添加其他框架或创建和维护某些特定的Java代码)。

至少有两种解决方案(与我合作的解决方案):

我确信所有其他组件套件(RichFaces,IceFaces,OpenFaces ......)都有类似的解决方案。

如果你想继续使用普通的JSF,我会选择使用OmniFaces。这是一个很好的补充,可以防止你保持对实现细节的了解。

编辑:我刚发现plain jsf solution

答案 1 :(得分:-1)

请试试这个:

JavaScriptRunner.runScript(FacesContext.getCurrentInstance(), "alert(hello)");

答案 2 :(得分:-1)

我不知道我的版本。但是我尝试了以下方法,它可以在我的环境中正常工作

FacesContext.getCurrentInstance().getResponseWriter().write("<script>alter('hello');</script>");