這是我的片段:JSF EL條件
<ui:fragment rendered="#{}">
<ui:include src="../includes/top.xhtml"/>
</ui:fragment>
我的LoginController將重定向頁面home.html的延伸MainController有一個布爾方法showComponent
所以當我嘗試調用此mainController.showComponent()
我得到一個nullPointerException
,因爲正如我注意到的,Java首先加載html以查看它是否正在調用任何Java類,因此當我試圖訪問mainController
(從HomeController擴展而來,尚未調用時),我得到這個空指針
。如何在maisController設置的情況下檢查片段內部?
這是我到目前爲止已經試過
<ui:fragment rendered="#{not empty mainController ? true : false}">
它總是返回true
。
這裏是我MainController類:
package com.erp3.gui.controllers;
import java.io.IOException;
import javax.faces.bean.ManagedBean;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
@ManagedBean
public class MainController {
public LoginController loginController;
public ExternalContext ec;
public void checkUserSession() throws IOException {
ec = FacesContext.getCurrentInstance().getExternalContext();
loginController = (LoginController) ec.getSessionMap().get("loginController");
loginController = (LoginController) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("loginController");
if (loginController == null || !loginController.getIsLoggedIn()) {
ec.redirect(ec.getRequestContextPath() + "/views/login.html");
}
}
public Boolean showComponent() {
return this.loginController.getIsLoggedIn();
}
}
我的方法showComponent()
從loginController
因爲它會在下一次請求時丟失,不是嗎?我不必訪問會話對象嗎? – Gerep 2012-04-26 19:44:31
它顯然在會話映射中,所以它可以在整個會話中使用。當'LoginController'實際上是'@ManagedBean @ SessionScoped'時,這是真的。 – BalusC 2012-04-26 19:45:01
使用'loginController.isLoggedIn'Didn't – Gerep 2012-04-26 19:46:24