我需要从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");
我在服务器日志中没有收到错误,但也没有看到警报。
有什么想法吗?
编辑:我尝试了建议的解决方案,涉嫌重复,我也没有收到服务器错误,但我也没有看到任何警告..
答案 0 :(得分:2)
我假设您想要从JSF ManagedBean而不是JSF组件执行此操作。
我不确定是否存在'普通'jsf解决方案(意味着不添加其他框架或创建和维护某些特定的Java代码)。
至少有两种解决方案(与我合作的解决方案):
Ajax.onComplete("alert('Hi'')")
的我确信所有其他组件套件(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>");