Я делаю небольшой сайт для школьного проекта, но немного борюсь с тем, как выйти из системы. Я обращаюсь с тем, чтобы войти в систему, просто записав его имя пользователя в бин @SessionScoped
и используя его для доступа к остальной его информации. Мой план их выхода - просто вернуть имя пользователя на ноль.
UserBean. java
@Data
@Named
@SessionScoped
public class UserBean implements Serializable {
private String username;
public boolean isLoggedIn() {
return username != null;
}
}
LoginController. java
@Named
@RequestScoped
public class LoginController {
@Inject
private UserBean userBean;
@EJB
private AccountDAO accountDAO;
@Inject
private LoginBackingBean loginBackingBean;
public void validateEmailAndPassword() {
if (accountDAO.usernameExist(userBean.getUsername())) {
if (!(accountDAO.getAccountByUsername(userBean.getUsername())).getPassword().equals(loginBackingBean.getPassword())) {
String msg = "Username or Password is incorrect";
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "", msg));
}
}
}
public void login() {
userBean.setUsername(loginBackingBean.getUsername());
}
}
LogoutController. java
@Named
@RequestScoped
public class LogoutController {
@Inject
private UserBean userBean;
public void logout() {
userBean.setUsername(null);
}
}
x html вставить, что его вид вызывается из (menuDropdown.x html):
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://xmlns.jcp.org/jsf/core"
>
<h:body>
<ui:composition>
<button class="btn btn-outline-dark" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
menu
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<p:link class="dropdown-item" href="#">
</p:link>
<div class="dropdown-divider"></div>
<div class="dropdown-item">
<h:commandButton class="btn btn-primary" value="Sign out" action="#{logoutController.logout}"></h:commandButton>
</div>
</div>
</ui:composition>
</h:body>
</html>
И вот как я вызываю logoutController:
<h:commandButton class="btn btn-primary" value="Sign out" action="#{logoutController.logout()}"></h:commandButton>
Прямо сейчас метод входа в систему работает отлично, и я могу получить имя пользователя из бина, написав #{userBean.username}
. Однако по какой-то причине ничего не происходит, когда я нажимаю commandButton
, чтобы выйти из системы. Я неправильно это называю или здесь что-то еще происходит?