在JSF中使用注释实施导航规则



我刚刚开始使用JSF 2.0,我很清楚可以使用XML文件执行此操作。但是由于J2EE倾向于使用越来越多的注释,也许我可以使用它们。

所以我的问题是:

  1. 可能吗?
  2. 如果是,如何?

编辑:

我要实现的是一个简单的登录页面。我拥有登录方法的托管用户:

@ManagedBean
public class User {
   //fields
   public String login() {
     if ( /*all is good*/)
        return "success"
     else 
        return "failure"
   }
}

现在在login.xhtml文件中,我有一个命令button,可以在单击

上调用登录方法
<h:commandButton action="#{user.login}" value="#{msg.login}"></h:commandButton>

(在我看来)隐式导航规则之所以限制的原因是:假设我将以上命令button放入login2.xhtml,总是 success.xhtml 成功地称呼成功。 fail.xhtml 否则,即使不是我想要的。

即使可以使用 faces-config.xml file(带有导航程序标签)轻松解决此问题,但我还是想使用注释(我不喜欢XML文件)。

我仍然看不到为什么使用注释会给您买东西。我了解,根据视图,您想重定向到另一个页面。由于您想将此信息保存在豆子中,因此您可以这样处理:

@ManagedBean
public class MyBean {
    public String login() {
        boolean success = authenticate();
        String callingView = FacesContext.getCurrentInstance()
                .getViewRoot().getViewId();
        if (success && callingView.contains("login2")) {
            return "success2?faces-redirect=true";
        } else if (success) {
            return "success?faces-redirect=true";
        }
        return "failure?faces-redirect=true";
    }
}

当然您可以消除faces-redirect=true,但是我发现使用后重新计算模式是很好的做法。

您可能想看看Ocpsoft的出色重写库。除了导航规则外,它还还可以定义自定义URL路由以在JSF应用程序中获取漂亮的URL。

您可以使用注释可以做的事情在大多数情况下仅限于URL重写,但是您也可以使用Java编写的ConfigurationProvider来定义用注释无法处理的任何内容。

最新更新