我刚刚开始使用JSF 2.0,我非常清楚可以使用xml文件执行此操作。但由于J2EE倾向于使用越来越多的注释,也许我可以使用它们。
所以我的问题是:
编辑:
我想要实现的是一个简单的登录页面。我有一个带有登录方法的ManagedBean用户:
@ManagedBean
public class User {
//fields
public String login() {
if ( /*all is good*/)
return "success"
else
return "failure"
}
}
现在在login.xhtml文件中,我有一个commandButton,在点击时调用登录方法
<h:commandButton action="#{user.login}" value="#{msg.login}"></h:commandButton>
(在我看来)隐式导航规则是限制性的原因是因为:假设我将上面的commandButton放入login2.xhtml,它总是 success.xhtml ,将在成功时调用和 failure.xhtml 否则,即使它不是我想要的。
尽管可以使用 faces-config.xml 文件(带有导航规则标签)轻松解决这个问题,但我想使用注释(我不喜欢xml文件)。
答案 0 :(得分:0)
您可能想看看ocpsoft优秀的rewrite库。除了导航规则之外,它还使您能够定义自定义URL路由以在JSF应用程序中获得漂亮的URL。
注释的内容大部分仅限于URL重写,但您也可以使用用Java编写的ConfigurationProvider来定义注释无法处理的任何内容。
答案 1 :(得分:0)
我仍然不明白为什么使用注释会给你买东西。据我所知,根据视图,您希望重定向到其他页面。既然你想把这些信息保存在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模式是一种很好的做法。