1
我有一个简单的GWT登录表单和一个用于简单用户登录的java servlet。我正在使用表单提交完成事件来处理响应,而无需重定向到操作目标URL,并且我想在客户端处理答案(密码不正确或全部为OK或任何其他自定义行为),然后采取适当的措施。如果登录无误,那么浏览器应该要求记住用户名和密码。GWT - 登录表单 - 如果用户/密码不正确,浏览器总是要求记住密码事件
问题是,对于每个响应,无论用户名+密码组合是否正确,浏览器总是要求记住它们。 有什么建议吗?我不想加载另一个页面,因为我想保持相同的GWT状态。我也尝试发送响应代码400或401,但它不起作用(在Chrome中测试)。
见下面的代码:
GWT onModuleLoad():
final FormPanel formPanel = new FormPanel();
formPanel.setEncoding(FormPanel.ENCODING_URLENCODED);
formPanel.setMethod(FormPanel.METHOD_POST);
VerticalPanel verticalPanel = new VerticalPanel();
verticalPanel.add(new Label("Username"));
TextBox userid = new TextBox();
userid.setName("username");
verticalPanel.add(userid);
verticalPanel.add(new Label("Password"));
PasswordTextBox passwd = new PasswordTextBox();
passwd.setName("password");
verticalPanel.add(passwd);
verticalPanel.add(new Button("Submit", new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
formPanel.submit();
}
}));
formPanel.add(verticalPanel);
formPanel.setAction("/login");
formPanel.addSubmitHandler(new FormPanel.SubmitHandler() {
public void onSubmit(SubmitEvent event) {
}
});
formPanel.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() {
public void onSubmitComplete(SubmitCompleteEvent event) {
GWT.log(event.getResults());
}
});
RootPanel.get().add(formPanel);
Java Servlet的测试:
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
resp.setContentType("text/plain");
System.out.println("Login request for " + username + "/" + password);
if (username.equals("test1234")) {
// send test response to output
printMessageToOutputStream(resp, "OK", true, true);
}
else {
resp.setStatus(HttpServletResponse.SC_FORBIDDEN); // not working for 400,401,403
printMessageToOutputStream(resp, "NOK", false , true);
}
}
编辑: 我也试过状态403(禁止),它不工作(我更新了代码段)
不工作要么。 (在Chrome上进行了测试 - 也使用了代码400,401) –
这是一个非解决方案,但为什么不使用表单提交,而是不使用真棒gwt客户机 - 服务器机制?会让你的生活更轻松并解决问题。指南:http://www.gwtproject.org/doc/latest/DevGuideServerCommunication.html –
我也试过,但浏览器在使用AJAX时表现得非常奇怪。例如,使用RPC,除非您强制提交表单,否则不会触发记住密码弹出窗口。此外,它不适用于Chrome,IO(例如iPhone),并且当您键入用户名的第一部分以查看建议并选择它(或在桌面上按Enter时),浏览器会要求记住一半的密码用户名(尽管您之前选择记住完整的用户名)。所以我不能100%正确地完成这项工作 –