我正在尝试使用
检查每个视图的身份验证<f:event type="preRenderView" listener="{#loginControl.checkAuthentication}" />
标签。
该机制有效,但看起来很糟糕,似乎缺少一些CSS。当我删除支票时,我的页面会按原样显示。
这是我的一个观点,其中是检查身份验证:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<f:event listener="#{loginControl.checkAuthorization}" type="preRenderView" />
<h:head>
...
调用以下方法:
public void checkAuthorization(ComponentSystemEvent evt){
FacesContext ctx = FacesContext.getCurrentInstance();
ConfigurableNavigationHandler nav = (ConfigurableNavigationHandler)
ctx.getApplication().getNavigationHandler();
// navigate to login-screen
if(this.user==null){
nav.performNavigation("login");
} else {
nav.performNavigation("welcome");
}
}
输出是这样的:
http://www.convince-it.de/Auswahl_002.jpeg
http://www.convince-it.de/Auswahl_003.jpeg
正如您所看到的那样,当我检查授权时,组件不会呈现。第一张图片是启用授权检查时生成的视图的屏幕截图。第二个视图是没有授权检查的渲染视图,但具有想要的外观。
有什么想法吗?
答案 0 :(得分:5)
显然,在预呈现期间导航处理程序更改了视图时,无法添加/更改必要的PrimeFaces CSS / JS。
我建议发送重定向而不是转发。
if (user == null) {
nav.performNavigation("login?faces-redirect=true");
} else {
nav.performNavigation("welcome?faces-redirect=true");
}