IceFaces ページで見つかったパターンを使用しようとしています (IceFaces は使用していませんが、PrimeFaces を使用しています)。
この場合、2 つの Bean があります。
ユーザーコントローラー とユーザーモデル
私のUserModelには、 UserVO (別のプログラマーによって作成された)のインスタンスがあります。私のUserControllerにはこれがあります:
@ManagedBean
@RequestScoped
public class UserController implements Serializable
{
private static final long serialVersionUID = 1L;
private UserBO bo;
private UserModel model;
public UserController()
{
bo = new UserBO();
model = new UserModel();
}
public void Login() throws IOException
{
model.setUserVo(bo.executeLogin(model.getUserVo()));
ExternalContext externalContent = FacesContext.getCurrentInstance().getExternalContext();
if (!model.getUserVo().isError())
{
model.setLoggedIn(true);
externalContent.getSessionMap().put("userSession", model);
externalContent.redirect(externalContent.getRequestContextPath() + "/views/request/search.html");
} else
{
model.setLoggedIn(false);
FacesMessage facesMessage = new FacesMessage(FacesMessage.SEVERITY_ERROR, model.getUserVo().getMessage(), model.getUserVo().getLogin());
FacesContext.getCurrentInstance().addMessage(null, facesMessage);
}
}
public UserBO getBo()
{
return bo;
}
public void setBo(UserBO bo)
{
this.bo = bo;
}
public UserModel getModel()
{
return model;
}
public void setModel(UserModel model)
{
this.model = model;
}
}
ご覧のとおり、UserModelの新しいインスタンスを作成し、から返されたものを設定するとbo.executeLogin()
、オブジェクトが返されます。
ユーザーがログインしていることを確認するために、UserModelにプロパティがあります。
@ManagedBean
@SessionScoped
public class UserModel
{
private UserVO userVo;
private Boolean loggedIn = false;
public UserModel()
{
userVo = new UserVO();
}
public UserVO getUserVo()
{
return userVo;
}
public void setUserVo(UserVO userVo)
{
this.userVo = userVo;
}
public Boolean getLoggedIn()
{
return loggedIn;
}
public void setLoggedIn(Boolean loggedIn)
{
this.loggedIn = loggedIn;
}
私はtemplate.xhtmlを持っています:
<ui:fragment rendered="#{userModel.loggedIn}">
<ui:include src="../includes/top.xhtml"/>
</ui:fragment>
loggedIn
問題は、それが機能しておらず、プロパティ値を取得していないことです。
私の推測では、この方法でアクセスすると、UserModelの新しいインスタンスを作成しているようなものです。もしそうなら、私のUserController はセッション スコープではなく、UserModelのみであるため、問題です。
編集
このプロパティを使用する代わりに、 UserModelloggedIn
プロパティが設定されているかどうかを簡単に確認できることはわかっていますが、問題はセッション スコープ Bean に関するものです。スコープ セッションではないため設定されているUserControllerからアクセスできません。 template.xhtml はすべてのページで使用されます。 userVo