Mad*_*ddy 31 javascript jsf primefaces managed-bean
有没有办法从JSF中的托管bean调用(执行)JavaScript函数?
如果这是相关的,我也使用PrimeFaces.
Bal*_*usC 45
在PrimeFaces 6.2之前,您可以使用RequestContext#execute()它.
public void submit() {
// ...
RequestContext.getCurrentInstance().execute("alert('peek-a-boo');");
}
Run Code Online (Sandbox Code Playgroud)
在PrimeFaces 6.2及以上版本中:
public void submit() {
// ...
PrimeFaces.current().executeScript("alert('peek-a-boo');");
}
Run Code Online (Sandbox Code Playgroud)
在标准JSF中,没有直接的公共API.最好的方法是将所需的脚本设置为bean属性,并<h:outputScript>在bean属性不为空时有条件地呈现组件.
<h:commandButton ... action="#{bean.submit}" />
<h:outputScript rendered="#{not empty bean.script}">#{bean.script}</h:outputScript>
Run Code Online (Sandbox Code Playgroud)
public void submit() {
// ...
script = "alert('peek-a-boo');";
}
Run Code Online (Sandbox Code Playgroud)
如果您是通过ajax提交表单,请不要忘记将其包装<h:outputScript>在另一个组件中并使用ajax更新它.另请参见Ajax update/render不适用于具有呈现属性的组件.
<h:commandButton ... action="#{bean.submit}">
<f:ajax execute="@form" render="script" />
</h:commandButton>
<h:panelGroup id="script">
<h:outputScript rendered="#{not empty bean.script}">#{bean.script}</h:outputScript>
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)
至于"没有直接的公共API"声明,奇怪的是,PartialResponseWriter类(负责编写JSF ajax响应)已经有JSF 2.0 startEval()和endEval()方法,它应该使你能够直接将回调脚本编写到响应,但直到即将到来的JSF 2.3那里令人惊讶的是,没有公开的方法PartialViewContext会委托这些方法.根据问题1412 PartialViewContext#getEvalScripts()最终被添加到公共API.
public void submit() {
// ...
FacesContext.getCurrentInstance().getPartialViewContext().getEvalScripts().add("alert('peek-a-boo');");
}
Run Code Online (Sandbox Code Playgroud)
对于较旧的JSF版本,只能通过创建自定义PartialViewContext实现来实现.JSF实用程序库OmniFaces完全OmniPartialViewContext可以通过Ajax实用程序类使用它.
public void submit() {
// ...
Ajax.oncomplete("alert('peek-a-boo');");
}
Run Code Online (Sandbox Code Playgroud)
小智 35
根据您所使用的Primefaces版本,您可以使用 RequestContext.execute("{js here}");
从Primefaces 3.4文档:
RequestContext提供了一种在ajax请求完成时执行javascript的方法,与传递回调参数和执行条件javascript相比,这种方法更容易.下面的示例在ajax请求完成时隐藏对话框;
码
public void save() {
RequestContext requestContext = RequestContext.getCurrentInstance();
requestContext.execute("dialog.hide()");
}
Run Code Online (Sandbox Code Playgroud)
Primefaces中最接近的是;
http://www.primefaces.org/showcase/ui/callbackParams.jsf
话虽如此,3.0也有所提升;
http://code.google.com/p/primefaces/issues/detail?id=1342
你不能简单地。
Managed Bean在服务器上运行,在浏览器上运行 JavaScript。
您可以根据 ManagedBean 中设置的值有条件地调用 JavaScript
| 归档时间: |
|
| 查看次数: |
83295 次 |
| 最近记录: |