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%正確地完成這項工作 –