在JSF中基于action controller方法的返回值调用javascript?
我在backingbean中编写了一个action方法,该方法由command按钮的action属性调用。成功执行时返回“null”,否则返回“error”。我需要做的是,我想根据action方法的返回值在javascript对话框中显示适当的消息。谁能告诉我如何做到这一点 您可以在支持bean中使用在JSF中基于action controller方法的返回值调用javascript?,javascript,jsf-2,Javascript,Jsf 2,我在backingbean中编写了一个action方法,该方法由command按钮的action属性调用。成功执行时返回“null”,否则返回“error”。我需要做的是,我想根据action方法的返回值在javascript对话框中显示适当的消息。谁能告诉我如何做到这一点 您可以在支持bean中使用RequestContext.getCurrentInstance().execute(“myfunction()”)方法。它允许您执行客户端javascript代码。不幸的是,这只在Primefa
RequestContext.getCurrentInstance().execute(“myfunction()”)
方法。它允许您执行客户端javascript代码。不幸的是,这只在Primefaces中可用(afaik)。因为您使用的是JSF2,所以可以在这里使用一些
魔术。将其中一个标记嵌套在命令按钮内:
<h:commandButton id="yourCmdButton" action="#{yourBean.yourMethod}">
<f:ajax render="hiddenComponent" onevent="displayMessage">
</h:commandButton>
或直接获得:
Flash jsfFlash = FacesContext.getCurrentInstance().getExternalContext().getFlash();
jsfFlash.put("errorMsg", "error");
//Or jsfFlash.put("errorMsg", null) if there's no error.
Flash是一个映射
,它允许参数在请求前一步继续存在,允许本地实现后重定向-获取模式,而您几乎不需要付出任何努力
在页面上,如果flash不包含错误属性,您可以直接访问flash并呈现消息:
<h:panelGroup rendered="#{flash.errorMsg != null}">
<p>
Well... it seems an error occured...
</p>
</h:panelGroup>
此外,还要考虑组件的上下文。您可能必须为该组件定义完整路径,而不是相对路径
顺便提一下,为什么不使用JSF的验证呢?通过使用验证器方法或与
组件一起使用完全实现的验证器会更好,并且您可以避免表单值的污染(因为验证器会介入并防止其他阶段中的SetValues发生)。但我不使用Primefaces:(好的,你没有说明你在使用什么。你试过了吗?没有。我会看一看。谢谢:)你可以更新页面中的一些隐藏字段,并在你的f:ajax
的success
上检查它的值。谢谢:)我会尝试使用ajax。@user2235057如果你发现任何问题,你知道在哪里可以找到我:)
<h:panelGroup rendered="#{flash.errorMsg != null}">
<p>
Well... it seems an error occured...
</p>
</h:panelGroup>
<h:panelGroup rendered="#{flash['error.message'] != null}">
<h:panelGroup id="messageParentGroup">
<h:panelGroup rendered="#{flash.errorMsg}">
...
<h:commandButton ...>
<f:ajax render="messageParentGroup"/>
</h:commandButton>