我刚刚开始使用JSF 2.0,我很清楚可以使用XML文件执行此操作。但是由于J2EE倾向于使用越来越多的注释,也许我可以使用它们。
所以我的问题是:
- 可能吗?
- 如果是,如何?
编辑:
我要实现的是一个简单的登录页面。我拥有登录方法的托管用户:
@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来定义用注释无法处理的任何内容。