【问题标题】:Double dispatching in jsfjsf中的双重调度
【发布时间】:2015-06-16 10:43:07
【问题描述】:

在 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 中是不可能的,不是吗?

【问题讨论】:

    标签: jsf jsf-2


    【解决方案1】:

    &lt;f:event listener&gt; 确实支持导航案例结果。

    只有 JSF 2.2 &lt;f:viewAction action&gt; 可以。也许你对此感到困惑。

    您需要将其设为void 方法并手动导航/重定向。

    public void doDoubleDispatch() {
        // ...
    
        FacesContext context = FacesContext.getCurrentInstance();
        NavigationHandler navigationHandler = context.getApplication().getNavigationHandler();
        navigationHandler.handleNavigation(context, null, "finalView");
    }
    

    也就是说,&lt;f:event&gt; 不一定需要以 &lt;f:metadata&gt; 结尾。这仅用于与&lt;f:viewParam&gt; 一起使用时的自我记录目的。在 JSF 2.0/2.1 时代,实际上被滥用于在设置所有视图参数后能够调用 bean 方法。因此,JSF 2.2 引入了&lt;f:viewAction&gt; 来填补这一空白,而这实际上需要放在&lt;f:metadata&gt; 中。

    另见:

    【讨论】:

    • 只是为了确定,像navigationHandler.handleNavigation(context, null, "finalView?faces-redirect=true"); 这样的东西是否可行?我的意思是执行重定向而不是调度...
    • 是的。如果您不关心可配置(隐式)导航案例,替代方案是 ExternalContext#redirect()
    • 我刚刚注意到,当我执行此类调度时,浏览器行中的 url 发生了变化。是否可以保持地址不变?
    • 这只会在您重定向时发生,而不是在您调度时发生。显然您已选择发送重定向。也许值得阅读,因为即使您在第 1 条评论中明确使用了正确的术语,但令我惊讶的是,您对此感到疑惑:stackoverflow.com/questions/15521451/…stackoverflow.com/questions/11277366/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2021-08-05
    相关资源
    最近更新 更多