【问题标题】:Implement navigation rules with annotations in JSF在 JSF 中使用注释实现导航规则
【发布时间】:2014-02-20 13:45:45
【问题描述】:

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

所以我的问题是:

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

编辑:

我想要实现的是一个简单的登录页面。我有一个使用 login 方法的 ManagedBean 用户:

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

现在在 login.xhtml 文件中,我有一个命令按钮,它在单击时调用登录方法

<h:commandButton action="#{user.login}" value="#{msg.login}"></h:commandButton>

(在我看来)隐式导航规则具有限制性的原因是:假设我将上面的 commandButton 放入 login2.xhtml,它总是 success.xhtml 会在成功时调用和 failure.xhtml 否则,即使这不是我想要的。

尽管这可以通过 faces-config.xml 文件(带有导航规则标签)轻松解决,但我想改用注释(我不喜欢 xml 文件)。

【问题讨论】:

  • 隐式导航是关于return从您的操作方法中获取视图名称,或者只是简单地将它们提供给&lt;h:link outcome&gt;之类的。 不需要注释,这是两个独立的概念。
  • 我已经知道了。但我认为这有点限制,因为我无法根据调用方法的 bean 调度视图
  • 你能在你的问题中举一个例子,即发布你喜欢它的样子吗?由于是 bean 控制它的方法返回(显然),所以调度的视图当然取决于 bean。

标签: jsf-2


【解决方案1】:

我仍然不明白为什么使用注释会给你带来好处。我了解根据视图,您希望重定向到不同的页面。由于您想将此信息保留在 bean 中,因此可以这样进行:

@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,但我发现使用 Post-Redirect-Get 模式是一种很好的做法。

【讨论】:

  • 谢谢。这显然是我一直在寻找的:将这些信息保存在 bean 中。但我不这么认为,我认为可以使用一些注释来代替。
  • @user3173787 您可能可以自己解决这个问题(查找 NavigationHandler 类),但如果没有真正的收获,它会变得更加复杂。
【解决方案2】:

您可能想看看 ocpsoft 出色的 rewrite 库。除了导航规则之外,它还使您能够定义自定义 URL 路由以在 JSF 应用程序中获得漂亮的 URL。

您可以对注释执行的大部分操作仅限于 URL 重写,但您也可以使用用 Java 编写的 ConfigurationProvider 来定义您无法使用注释处理的任何内容。

【讨论】:

  • jsf导航跟注解无关。 rewrite 库允许您拥有更漂亮的 url 或将特定视图与具体的托管 bean 联系起来,但这不是简单的导航。
  • 是的,这不是我真正想要的。但是在查看 JSEE 文档后,我认为您要么必须使用 faces-config.xml 要么使用隐式导航
猜你喜欢
  • 2013-10-22
  • 1970-01-01
  • 1970-01-01
  • 2014-04-26
  • 1970-01-01
  • 2016-05-24
  • 2011-07-05
  • 2012-05-04
  • 1970-01-01
相关资源
最近更新 更多