0

我有一个使用 Java 构建的 Web 应用程序、用于数据库访问的 JDBC、用于将数据传递给视图的 Struts2 以及用于辅助视图操作的 jQuery。

当应用程序启动时,它会执行 Home.action 并显示 Home.jsp 页面,该页面在顶部包含一个“登录”链接。还有其他视图也包括顶部的“登录”链接。

当用户单击“登录”时,jQuery 会显示一个隐藏窗格,其中提供用户名和密码的文本字段以及“登录”按钮。

这是我的困境……目前,单击“登录”按钮会执行 Login.action,然后重定向回 Home.action。但是,我真正想要的是 Login.action 执行登录,但保持在同一页面上。事实上,我根本不希望视图改变或刷新;我只是希望登录发生,其他一切都保持不变。

我有两个主要原因: 1)如果用户输入了无效的字段数据或登录不成功,我不想去任何地方;我只想向用户显示错误。2)由于多个页面提供了顶部登录的能力,我不想随意重定向回Home.action;我希望用户留在原地。

所以,我向社区提出的问题是:我可以使用我已经使用的技术(以及如何使用?)来做到这一点,还是我需要考虑添加其他技术(以及哪些技术?)?

非常感谢!

4

1 回答 1

2

我会尽量总结。

选项 1:使用 SPA(单页应用程序)。您可以在 jQuery 之上添加另一个 JavaScript 框架,以使您的生活更轻松。更多信息:http ://en.wikipedia.org/wiki/Single-page_application

选项 2:您可以使用 jQuery(或市场上可用的任何产品)创建自己的 JavaScript MVC 框架。

请注意,在选项 1 和选项 2 之间做出决定后,您将拥有两层:表示层 + 业务层。

最后,您可以对 Web 服务进行 Ajax 调用,并从表示层控制任何重定向或显示行为。总之,您的演示文稿完全独立于您的业务层。

让我们看看我是否可以举例说明:

这将是我们 login.html 的一部分

<script type="text/javascript">
$(document).ready(function(){
    $("#singInButton").click(function{
    var parameters = {SignIn:{username:"userNameFromField", password:"passwordFromField"}};
    $.post("signin", parameters, function(data, status){
            if(data.message === "SUCCESS") {
                alert("Welcome back.");
            }else{
                alert("Invalid credentials. Please, try again.");
            }
        });
    });
});
</script>

假设这会生成一个请求,如:{SignIn:{username:"userNameFromField", password:"passwordFromField"}}

在服务器端,已验证这些是有效的凭据。所以,你会返回类似的东西(对不起,我不熟悉 Struts,但我相信你能弄明白):

response.setContentType("application/json");
response.setResponseBody("SUCCESS");

最后,用户界面会提示“欢迎回来。”。您不必发送回复,只需以正确的格式返回您想要的内容。当然,有数百个框架可以让生活更轻松,并将 json 或 xml 对象转换为 JavaObject,因此您不必手动解析字符串。

我希望这个例子可以澄清我想说的。

干杯,

于 2013-07-12T22:29:58.480 回答