私は次のコンテキストを持っています:
次のような xhtml ページ:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>My Event</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
</h:head>
<body>
<f:event listener="#{filterEventCreator.check}" type="preRenderView" />
...
これは filterEventCreator です。
public void check(ComponentSystemEvent event) {
if(amIComingFromDispatcher()){
SYSO_Testing.syso("FilterEventCreator in this case, everything it's ok");
sessionUtility.setNotComingFromDispatcher();
}
else{
try {
SYSO_Testing.syso("I'm not coming from redirect");
sessionUtility.sessionLogout();
response.sendRedirect(errorPath);
}
catch (IOException ex) {
Logger.getLogger(FilterEventCreator.class.getName()).log(Level.SEVERE, null, ex);
}
}
private boolean amIComingFromDispatcher() {
if(this.loggedUser==null)return false;
return sessionUtility.getComingFromDispatcher();
}
sessionUtility は次のとおりです。
@Named
@SessionScoped
public class SessionUtility implements Serializable {
private String loggedUserName, loggedUserPassword;
private int errorCode, eventID;
private boolean error, comingFromDispatcher;
@PostConstruct
public void init() {
error = false;
comingFromDispatcher = false;
}
public void addUser(String username) {
loggedUserName = username;
SYSO_Testing.syso("User added in cache");
}
public String getLoggedUser() {
return loggedUserName;
}
public void sessionLogout() {
SYSO_Testing.syso("starting logout from Session bean");
FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
loggedUserName = null;
error = false;
request.getSession().invalidate();
}
public void setError(int value) {
errorCode = value;
error = true;
}
public boolean isAnError() {
return error;
}
public int getError() {
return errorCode;
}
public void showedError() {
error = false;
}
public void setNotComingFromDispatcher() {
comingFromDispatcher = false;
}
public void setComingFromDispatcher() {
comingFromDispatcher = true;
}
public boolean getComingFromDispatcher() {
return comingFromDispatcher;
}
xhtmlページに直接接続すると、フィルターはログに記録されておらず、リダイレクトも行われていないことを認識しますが、リダイレクトしようとすると次のエラーが発生します: Error Rendering View[/Error.xhtml] Java. lang.NullPointerException
このプロジェクトをデバッグしましたが、loggedUser 以外の応答も変数も null ではありません。私を助けてくれる人に感謝します。