Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JSF中基于action controller方法的返回值调用javascript?_Javascript_Jsf 2 - Fatal编程技术网

在JSF中基于action controller方法的返回值调用javascript?

在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

我在backingbean中编写了一个action方法,该方法由command按钮的action属性调用。成功执行时返回“null”,否则返回“error”。我需要做的是,我想根据action方法的返回值在javascript对话框中显示适当的消息。谁能告诉我如何做到这一点

您可以在支持bean中使用
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>