jsf中的双重调度
Double dispatching in jsf
在 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 中,这样的事情是不可能的,不是吗?
<f:event listener>
不支持导航案例结果。
只有 JSF 2.2 <f:viewAction action>
可以。也许你对此感到困惑。
您需要将其设为 void
方法并 navigate/redirect 手动。
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>
.
中
另请参阅:
- Hit a bean method and redirect on a GET request
- What can <f:metadata>, <f:viewParam> and <f:viewAction> be used for?
在 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 中,这样的事情是不可能的,不是吗?
<f:event listener>
不支持导航案例结果。
只有 JSF 2.2 <f:viewAction action>
可以。也许你对此感到困惑。
您需要将其设为 void
方法并 navigate/redirect 手动。
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>
.
另请参阅:
- Hit a bean method and redirect on a GET request
- What can <f:metadata>, <f:viewParam> and <f:viewAction> be used for?