是否可以在Mojarra-2.1中使用。如果我通过单击操作按钮从操作方法调度到另一个视图:
<h:commandButton value="dispatch" action="#{myBean.action()}" />
豆子:
@ManagedBean
@RequestScoped
public class MyBean{
public String action(){
//do some
return "view";
}
}
我的浏览器然后收到视图view
的内容。视图view
又包含以下内容:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<f:metadata>
<f:event listener="#{viewBean.doDoubleDispatch()}" type="preRenderView" />
</f:metadata>
</html>
,其中
@ManagedBean
@RequestScoped
public class ViewBean{
public String doDoubleDispatch(){
//do
return "finalView";
}
在调用doDoubleDispatch
方法后,我没有看到finalView
的内容。但是如果单击调用该方法的actionButton
,它将完全正常工作。
所以,这些事情在Mojarra-2.1中是不可能的,不是吗?
答案 0 :(得分:2)
<f:event listener>
不支持导航案例结果。
只有JSF 2.2 <f:viewAction action>
才有。也许你会对它感到困惑。
您需要将其设为void
方法并手动导航/重定向。
public void doDoubleDispatch() {
// ...
FacesContext context = FacesContext.getCurrentInstance();
NavigationHandler navigationHandler = context.getApplication().getNavigationHandler();
navigationHandler.handleNavigation(context, null, "finalView");
}
尽管如此,<f:event>
并不一定需要以<f:metadata>
结尾。这仅用于与<f:viewParam>
一起使用时完成的自我纪录目的。在JSF 2.0 / 2.1时代,实际上滥用了能够在设置了所有视图参数后调用bean方法。因此,JSF 2.2引入了<f:viewAction>
来填补这一空白,这反过来确实需要被置于<f:metadata>
。