通过GET请求输入字段的旧值(Old values in input fields by GET r

2019-10-29 14:25发布

我有在文件loginform.xhtml这个JSF表格:

  <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 ),表格由旧值填充! 更正确的价值观 - 这是系统的安全:-)非常糟糕。 同样的情况,如果我通过小时导航到该页面:link标签。 它只有在的情况下正常工作,如果我通过POST请求跳转到页面(通过的commandButton FE)。

这怎么可能?

Answer 1:

JSF没有做到这一点(作为证据,看在生成的HTML输出)。 web浏览器做到这一点。 此功能称为“自动填充” /“自动完成”。 只要告诉它不是通过增加做autocomplete="off"个别输入组件。

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

或者,如果你对JSF 2.2(或正在使用OmniFaces Html5RenderKit ),你也可以将其设置形式,广泛。

<h:form ... autocomplete="off">


文章来源: Old values in input fields by GET request
标签: forms jsf