Jsf 2 在JSF中使用注释实现导航规则
我刚刚开始使用JSF2.0,我非常清楚使用xml文件可以实现这一点。但是由于J2EE倾向于使用越来越多的注释,也许我可以利用它们 所以我的问题是: 可能吗? 如果是,如何进行? 编辑: 我想要实现的是一个简单的登录页面。我有一个使用登录方法的ManagedBean用户: 现在在login.xhtml文件中,我有一个commandButton,它在单击时调用login方法Jsf 2 在JSF中使用注释实现导航规则,jsf-2,Jsf 2,我刚刚开始使用JSF2.0,我非常清楚使用xml文件可以实现这一点。但是由于J2EE倾向于使用越来越多的注释,也许我可以利用它们 所以我的问题是: 可能吗? 如果是,如何进行? 编辑: 我想要实现的是一个简单的登录页面。我有一个使用登录方法的ManagedBean用户: 现在在login.xhtml文件中,我有一个commandButton,它在单击时调用login方法 <h:commandButton action="#{user.login}" value="#{msg.login}"
<h:commandButton action="#{user.login}" value="#{msg.login}"></h:commandButton>
在我看来,隐式导航规则具有限制性的原因是:假设我将上面的commandButton放入login2.xhtml中,则在success和failure.xhtml中调用success.xhtml,否则,即使这不是我想要的
尽管使用带有导航规则标记的faces-config.xml文件可以很容易地解决这个问题,但我还是希望使用注释,因为我不喜欢xml文件 您可能想看看ocpsoft的优秀库。除了导航规则之外,它还使您能够定义自定义URL路由,以在JSF应用程序中获得漂亮的URL
您可以对注释所做的大部分工作仅限于URL重写,但您也可以使用Java编写的ConfigurationProvider来定义任何无法处理注释的内容。我仍然不明白为什么使用注释会给您带来好处。我理解,根据视图的不同,您希望重定向到不同的页面。由于您希望将此信息保存在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来调度视图。你能在你的问题中给出一个例子吗?显然,由于是bean控制其方法返回的内容,因此调度视图当然依赖于bean。Jsf导航与注释无关。重写库允许您拥有更漂亮的URL或将特定视图与具体的托管bean绑定,但这不是简单的导航。是的,这不是我真正想要的。但是在查看JSEE文档之后,我认为您要么必须使用faces-config.xml,要么必须使用隐式导航谢谢。这显然是我想要的:将这些信息保存在bean中。但我不这么认为,我相信可以使用一些注释来代替。@user3173787您可能可以自己编写NavigationHandler类,但如果没有真正的收益,它会更复杂。
@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";
}
}