检查struts2中是否已存在该用户

时间:2015-07-01 15:13:52

标签: java validation jsp struts2 struts2-interceptors

我希望如果用户尝试使用我表中已存在的代码进行注册,那么它应该提供错误

  

此代码已被采用,请尝试使用不同的代码。

使用Struts2我想这样做。下面是我的动作类。

我所做的是:首先我发出了一个查询,用于使用结果集选择代码,并将所有结果存储在一个字符串变量temp_uservalidate()方法中,我刚刚使用{{ 1}}方法,但它不起作用。

RegisterAction.java

equals(temp_user)

2 个答案:

答案 0 :(得分:2)

感谢@Andrea Sir for Suggestion,它真的帮到了我。 :) 我在Validate()方法中编写了以下代码,并且我的代码已成功执行。非常感谢先生:)并且你发布的链接也清除了我应该如何在JSP和Action之间调用拦截器的概念。 :)下面是我的代码。

String temp_user = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/foryou", "root", "siddheshkk");
            System.out.println("Step 1");
            Statement st12 = con.createStatement();
            ResultSet rs12 = st12.executeQuery("select code from bbinfo");
            while (rs12.next()) {

                temp_user = rs12.getString("code");
                System.out.println("step2");
                if (register.getCode().equals(temp_user)) {
                    addFieldError("register.code",
                            "This username is already taken .Try Different one !");
                    System.out.println("sid");
                }

            }
            st12.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

答案 1 :(得分:0)

您的问题是validate()方法运行的execute()方法在到达操作之前执行,因此在{{1}之前执行方法。

这意味着在temp_user方法中读取时validate()始终为空。

您需要了解Struts2的工作原理,尤其是Validation Interceptor的时间和方式。

  

解决方案:在temp_user方法中加载validate()变量。

另请阅读the Interceptors are called between the JSP and the Action,讨论如何使代码更清晰,更加分离,因为动作中的所有JDBC内容都非常难看。