Я получил эту форму JSF в файле loginform.xhtml:Старые значения в полях ввода по запросу GET
<h:form>
<h:panelGrid columns="3" styleClass="components" cellpadding="5px">
<h:outputText value="#{msg['login.username']}"/>
<h:inputText id="username" value="#{userManager.loginUser.username}" required="true"/>
<h:message styleClass="error" for="username"/>
<h:outputText value="#{msg['login.password']}"/>
<h:inputSecret id="password" value="#{userManager.loginUser.password}"
required="true"/>
<h:message styleClass="error" for="password"/>
<h:commandButton value="#{msg['login.confirm']}"
action="#{userManager.doLogin}"/>
</h:panelGrid>
</h:form>
С этой ManagedBean:
public class UserManager implements Serializable {
/**
* Creates a new instance of UserManager
*/
public UserManager() {
}
private UserRecord loginUser = new UserRecord();
private UserRecord sessionUser;
@EJB
private UserRecordFacadeLocal userRecordFacade;
public UserRecord getLoginUser() {
return loginUser;
}
public void setLoginUser(UserRecord loginUser) {
this.loginUser = loginUser;
}
public UserRecord getSessionUser() {
return sessionUser;
}
public void setSessionUser(UserRecord sessionUser) {
this.sessionUser = sessionUser;
}
public String doLogout() {
setSessionUser(null);
return "logout";
}
public String doLogin() {
if (userRecordFacade.authorizedAcces(loginUser.getUsername(), loginUser.getPassword())) {
setSessionUser(loginUser);
return "success";
}
return "failure";
}
}
Здесь мой вопрос: если я нахожу запрос GET для loginform.xhtml (в моем случае: http://localhost:8080/Impetus-web/loginform.xhtml
), форма заполняется старыми значениями! Еще более правильные значения - это действительно плохо для безопасности системы :-). То же самое происходит, если я сделаю навигацию на эту страницу с помощью тега h: link. Он отлично работает только в том случае, если я перехожу на страницу через запрос POST (через commandButton f. E.).
Как это возможно?
Возможно, область видимости вашего «UserManager» неверна. Это сеанс? –
Да, это сеанс. Я должен быть, не так ли? –
Если вы сделаете это '@ SessionScoped', то он находится на текущем сеансе HTTP, что делает его зависимым от [вашей текущей методологии отслеживания сеанса HTTP] (http://stackoverflow.com/a/8901917/1199132). Просто измените его на '@ ViewScoped' или' @ RequestScoped' в зависимости от того, хотите ли вы сохранить состояния просмотра или нет. –