我有一个jsp页面,它映射到struts.xml,其中在一个动作类中,它从数据库检查ID和密码是否正确。如果它们正确,它将映射到corret页面。我想如果它不映射,那么应该在其中显示一个jQuery弹出窗口,“ ID或密码错误”!

HTML代码

    <form action="alreadylogin" method="post">
                Enter your Email Id&nbsp;<input type="email" name="loginemail"  placeholder="Enter Your Email Id" required  ><br><br>

                Enter your Password&nbsp;<input type="password" name="loginpass" placeholder="Enter your Password" required ><br><br>

                <input type="reset" value="Reset">&nbsp;&nbsp;
                <input type="submit" value="Submit">


动作类:此处的动作类显示了从STRUTS.XML映射的动作。

    public String execute()
    {
        String check=null;

        try {
            ResultSet r = st.executeQuery("select userpass,firstname from register where usermail='"+ loginemail +"'");

            while (r.next()) {
                String psw=r.getString(1);
                String name=r.getString(2);

                jname=name;

                if(psw.equals(loginpass))
                {
                    session.put("S3CRET", "S3CRET");
                    session.put("USERNAME", jname);
                    check="success";
                }
                        else
                {
                    check="input";
                }
            }
        }
        finally
        {
            return check;
        }


如何在此处应用jQuery弹出窗口?

最佳答案

您已经在提交页面了;使用jQuery弹出框不再有意义
因为您无论如何都会转发或重定向回来–只需显示
输入结果页面中的相应消息。

如果您真的认为有必要进行其他工作,那么豪尔赫的答案是合适的。如果要避免页面刷新,请使用JSON插件并仅返回JSON响应。这增加了您似乎尚未准备好的复杂程度。



这是一堆无关的评论。

ResultSet r =
  st.executeQuery("select userpass, firstname from register where usermail='" + loginemail + "'");


这是SQL注入的邀请。不要这样做;使用准备好的语句。

String name = r.getString(2);
jname = name;

if (psw.equals(loginpass)) {
    session.put("S3CRET", "S3CRET");
    session.put("USERNAME", jname);


这里没有理由使用jname。您已经有name;进行会话,例如

String name = r.getString(2);
if (psw.equals(loginpass)) {
    session.put("USERNAME", name);


完全没有理由将密码放入会话中。

我认为在这么短的方法中仅包含一个return语句并不有价值。
请尽快返回适当的结果,并允许进行更快的推理
方法。

public String execute() {
    String name;
    ResultSet r = st.executeQuery("select userpass,firstname from register where usermail='" + loginemail + "'");
    while (r.next()) {
        if (!psw.equals(loginpass)) {
            return INPUT;
        }

        name = r.getString(2);
    }

    session.put("USERNAME", name);
    return SUCCESS;
}


execute方法中这些都不会发生。方法应在同一级别上运行
抽象,只做一件事情,然后完全完成。 execute方法应该做的更多
而不是检查有效的登录名并返回适当的结果,则更接近:

public String execute() {
    return loginService.login(email, password) ? SUCCESS : INPUT;
}


login应该存在于注入到动作中的服务中,或者至少存在于
动作课。我不能推荐后者;有关更多详细信息,请搜索与“反转”相关的任何内容
控制”,“依赖注入”,“编写可测试的Java代码”等等。

09-25 16:35