2013-08-29 1 views
0

Я получил эту форму 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.).

Как это возможно?

+1

Возможно, область видимости вашего «UserManager» неверна. Это сеанс? –

+0

Да, это сеанс. Я должен быть, не так ли? –

+0

Если вы сделаете это '@ SessionScoped', то он находится на текущем сеансе HTTP, что делает его зависимым от [вашей текущей методологии отслеживания сеанса HTTP] (http://stackoverflow.com/a/8901917/1199132). Просто измените его на '@ ViewScoped' или' @ RequestScoped' в зависимости от того, хотите ли вы сохранить состояния просмотра или нет. –

ответ

0

JSF не делает этого (как доказательство, смотрите в сгенерированный выход HTML). Этот веб-браузер делает это. Эта функция называется автозаполнением/автозаполнением. Просто скажите, чтобы это не делалось, добавив autocomplete="off" к отдельным компонентам ввода.

<h:inputText ... autocomplete="off" /> 
<h:inputSecret ... autocomplete="off" /> 

Или, если вы на JSF 2.2 (или с помощью OmniFaces Html5RenderKit), вы можете также установить его форму шириной.

<h:form ... autocomplete="off"> 
Смежные вопросы