Gwt 让浏览器在登录时保存用户名/密码值<;表格>;?

Gwt 让浏览器在登录时保存用户名/密码值<;表格>;?,gwt,Gwt,我有一个GWT应用程序,需要一个用户登录表单。我想让浏览器为用户保存用户名和密码。我相信我需要为此使用一个“常规”表单(而不是GWT生成的表单)。所以我做了一个简单的表格: <form id="myform"> <input type="text" name="username"> <input type="password" name="password"> <input type="submit" value="Login" />

我有一个GWT应用程序,需要一个用户登录表单。我想让浏览器为用户保存用户名和密码。我相信我需要为此使用一个“常规”表单(而不是GWT生成的表单)。所以我做了一个简单的表格:

<form id="myform">
  <input type="text" name="username">
  <input type="password" name="password">
  <input type="submit" value="Login" />
</form>

有人知道如何让它工作吗?

在搜索相同的内容时,我在google web toolkit孵化器的wiki中偶然发现了以下段落:

自动完成和GWT

某些浏览器提供存储用户名/密码组合的选项,以便用户下次访问页面时自动填写这些组合。但是,通常只有在有两个输入框(其中一个是password类型)的情况下,并且只有当这些输入框与主页一起加载,而不是稍后通过javascript添加时(GWT就是这样做的)

为了强制显示这些输入框,将它们填充到项目的HTML中的一个不可见div中。然后,在GWT中,不创建文本框和密码文本框,而是使div可见并使用DOM读取值。图书馆


请参阅:

这取决于表单(
myform
)的外观,因为每个浏览器都使用自己的启发式方法来发现具有凭据的潜在登录表单(例如,Chrome需要标记中存在一个action属性)。所以,我们所做的就是为我们的应用程序必须支持的每一个浏览器提供谷歌的“记住凭据”功能。结果是以下表单元素:

<form id="login-form" style="display:none" action="login">
    <input type="text" tabindex="0" name="username" id="login-username">
    <input type="password" tabindex="0" name="password" id="login-password">
    <input style="position: absolute; left: -9999px; width: 1px; height: 1px;" type="submit">
</form>

FF和铬。问题是,我使用自己用Java编写的身份验证方法,因此我必须在单击submit按钮后调用此方法。我尝试了很多方法:我不想使用“丑陋”的普通html登录表单,所以我使用了GWT表单,在单击登录后,我将用户名和密码复制到html隐藏表单,并人工单击表单上的提交按钮。然后,该表单通过JSNI->din not work(broswer没有建议保存密码)运行Java登录方法。问题是在表单操作、onSubmit事件或submit onClick事件中放入什么。现在我有了“javascript:window.doSubmitForm();”,其中doSubmitForm()通过JSNI导出的javascript函数在Java中执行登录这是我的html表单元素:Username:
Password:
在Java中,我的GWT登录按钮上有onClick处理程序,其中有以下内容:DOM.getElementById(“登录用户名”).setInnerText(user.getValueAsString());DOM.getElementById(“登录密码”).setInnerText(password.getValueAsString());FormElement.as((Element)DOM.getElementById(“登录表单”)。submit();action=“login“意味着,用户将被重定向到,我不想添加另一个servlet来处理此问题。您可以稍后将action属性修改为所需的内容,对于浏览器来说,重要的是加载页面时DOM中的内容。您有什么特别的内容?你有任何代码工作的例子吗?我尝试过“javascript:window.doSubmitForm();”,其中doSubmitForm是我的Java函数,可以通过JSNI进行登录逻辑,但浏览器不提供保存密码的功能。我在答案中添加了一个示例。@z00bs我也被重定向到xxx?username=test&password=test。如何防止重定向
<form id="login-form" style="display:none" action="login">
    <input type="text" tabindex="0" name="username" id="login-username">
    <input type="password" tabindex="0" name="password" id="login-password">
    <input style="position: absolute; left: -9999px; width: 1px; height: 1px;" type="submit">
</form>
public class Starter implements EntryPoint {

    private static final String FORM_ID = "login-form";
    private static final String USER_ID = "login-username";
    private static final String PASSWORD_ID = "login-password";

    @Override
    public void onModuleLoad() {
        injectLoginFunction();
        TextBox fUsername = TextBox.wrap(DOM.getElementById(USER_ID));
        fUsername.setStyleName("gwt-TextBox");
        PasswordTextBox fPassword = PasswordTextBox.wrap(DOM.getElementById(PASSWORD_ID));
        fPassword.setStyleName("gwt-PasswordTextBox");
        FormPanel fLoginForm = FormPanel.wrap(DOM.getElementById(FORM_ID), false);
        fLoginForm.setAction("");
        fLoginForm.addSubmitHandler(new SubmitHandler() {

            @Override
            public void onSubmit(SubmitEvent event) {
                Window.alert("test");
            }
        });
        fLoginForm.getElement().setAttribute("onsubmit", "login();return false;");
    }

    private static void doLogin() {
        Window.alert("test");
    }

    private static native void injectLoginFunction() /*-{
        $wnd.login = function() {
            @test.client.Starter::doLogin()();
        };
    }-*/;
}