我有这个登录表单:
<h:form>
<h:panelGrid columns="2" >
<h:outputLabel for="username" value="Login:"/>
<h:inputText id="username" value="#{userController.userName}" required="true"/>
<h:outputLabel for="password" value="#{msg.password}"/>
<h:inputSecret id="password" value="#{userController.password}" required="true"/>
<h:column/>
<h:commandButton value="#{msg.login}" action="#{userController.login}"/>
</h:panelGrid>
</h:form>
使用这个支持 bean:
@ManagedBean(name = "userController")
@SessionScoped
public class UserController {
private String userName = "";
private String password = "";
//getter, setters
public String login(){
FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest)context.getExternalContext().getRequest();
try {
request.login(userName, password);
} catch (ServletException e) {
}
return "next-page.xhtml"; //if login processes is proper, i redirect to next page
}
}
我阅读了JSF 的最佳实践:模型、动作、getter、导航、阶段监听器
我总是发回同一个视图(返回 null 或 void,然后有条件地渲染/包含结果。对于页面到页面导航,我不使用 POST 请求(对于导航案例是强制性的),因为这对UX(用户体验;浏览器后退按钮的行为不正常,浏览器地址栏中的 URL 总是落后一步,因为默认情况下它是转发,而不是重定向)和 SEO(搜索引擎优化;搜索机器人不索引 POST 请求). 我只是使用输出链接甚至纯 HTML 元素进行页面到页面导航。
那么,当我的登录正确并且我想立即重定向到时我应该怎么做next-page.xhtml
?