h:commandButton,然后在JSF中执行操作并进行页面导航?

时间:2019-01-31 16:24:41

标签: jsf

是否可以有一个commandButton执行某个后备bean的方法,然后又导航到另一个页面?

我知道我可以在commandButton调用的方法中返回String,但是该方法也用在目标页面上,这意味着通常在同一页面上调用它。 因此,对于来自同一页面的呼叫,重定向是不必要的,我想避免这种情况。

我现在想到的选项:

  • 为该方法的“远程”调用创建一个单独的方法,该方法具有相同的逻辑并且还重定向到页面
  • 使用附加的h:button并使用JavaScript,以便如果按下commandButton,则同时按下h:button(可能是不好的做法)

我缺少任何选择吗?有什么方法可以告诉commandButton自己应该导航到某个地方,还是必须在后备豆中实现呢?

2 个答案:

答案 0 :(得分:1)

您的标题和第一句话很“危险”,因为两者都不是话题,答案是肯定的,并且您在第二段中已经描述了自己(=答案)。

真正的问题进一步有效地询问了条件导航。但是,首先让我指出,如果您只是确保不在bean(which you should not)中进行实际工作,那么您对两种方法的解决方案也没有错。

现在条件导航本身并不困难

我想您已经知道的所有基本JSF,这只需要做某事即可

因此,问题仍然存在,

可以用来返回null或if / else中的另一个新页面。

第1页:

<h:commandButton action="#{mybean.action(true))" />

第2页:

<h:commandButton action="#{mybean.action(false))" />

豆:

public String action(boolean navigate) {

    doWork();

    if (navigate) {
        return "page2.xhtml?faces-redirect=true";
    } else {
        return null;
    }

如果需要的话,甚至可以将null或页面名称作为参数传递给方法调用。

实现对操作源页面的检测的优点在于,在UI中,您不需要任何有关导航的知识,您总是调用相同的方法而没有任何参数,并且每个新页面都将用于此操作导航到正确的页面,而不需要开发任何知识。

所以请你选择。

答案 1 :(得分:-1)

我不确定我是否正确,但是您可以执行以下操作:

<h:commandButton value="Click" action="otherPage.xhtml?faces-redirect=true">
     <f:actionListener binding="#{bean.method}" />
</h:commandButton>

记之后actionListener从的commandButton记住,action会先启用和。希望对您有所帮助。

更新

由于没有进一步的考虑,您可以在有或没有重定向的情况下使用commandButton

<h:commandButton value="Click" action="{bean.method}"/>