JSFをFacesで表示するためのログイン例を作成しています.PHPバックグラウンドがあるので、多くの困難があります。JSFログインセッションとリダイレクト
これは私がいくつかのGoogle検索に基づいて作業している方法です。
私は3つのコントローラとフォルダがあります。
メインコントローラを。 HomeController; LoginController;
私は1つのbuを表示せずに読みやすくするために設定します。
メインコントローラ:
package com.erp3.gui.controllers;
import javax.faces.context.FacesContext;
public class MainController {
public LoginController loginController;
public MainController() {
this.checkUserSession();
}
public String checkUserSession() {
loginController = (LoginController) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("loginController");
if (!loginController.getIsLoggedIn()) {
return "login.html";
} else {
return null;
}
}
}
にHomeController:
package com.erp3.gui.controllers;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
public class HomeController extends MainController {
public String username;
public HomeController() {
super();
}
}
LoginController:
package com.erp3.gui.controllers;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
@ManagedBean
public class LoginController {
public Boolean isLoggedIn = false;
private String username;
private String password;
private FacesMessage msg;
public String login() {
if (this.getUsername().equals("daniel") && this.getPassword().equals("123")) {
this.isLoggedIn = true;
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("loginController", this);
return "home.html";
} else {
this.isLoggedIn = false;
msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Usuário ou senha inválida.", username);
FacesContext.getCurrentInstance().addMessage(null, msg);
return "login.html";
}
}
public String logOut() {
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("loginController");
return "login.html";
}
}
ので、読書の私はセッションを作成するこの方法を見つけたOMEページ、それが正しい場合はNOはありません:
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("loginController", this);
何が起こるかというと、偽リダイレクトlogin.xhtmlの場合にHomeControllerに、私は、セッションの状態を確認することです
もう一つは、私の中にログインしたとき、私はhome.xhtmlにリダイレクトしていますが、URLはlogin.xhtml
に残っていると私はhome.xhtml
に変更したときに、それは私にこの美しいエラーを返します:
Cant instantiate class: com.erp3.gui.controllers.HomeController.
また、私は私のhome.xhtmlファイルを呼び出すときに、それはにHomeControllerロードすることを知っていただきたいと思いますかJavaは単にhome.xhtmlをロードしますか?
HomeControllerが呼び出されたhome.htmlページを呼び出すと、私に説明できますか? – Gerep
'home {{homeController}'によって 'home.xhtml'で参照されているかどうか、また別のマネージドBeanによって管理プロパティとして暗黙的に参照されているかどうかによって異なります。私はちょうどあなたがインターネット上で見つけたいくつかの緩いスニペットを共にするのではなく、まともなJSFの本を通過することをお勧めします。 – BalusC
私のアプローチを修正する方法についての良いコンテンツを見つけることができるリンクがありますか? – Gerep