0

私はこの検証機能を持っています。データベースに対してログインフォームを検証します。Javaは式username.isEmpty()password.isEmpty()2回テストしますか? 前者は if ((!username.isEmpty()) && (!password.isEmpty()))、後者は

if(username.isEmpty())
    error.addError("username", "Username is mandatory.");
if(password.isEmpty())
    error.addError("password", "Password is mandatory.");

?

同じテストをやり直さないように、最初のテストの結果を「保存」する内部メカニズムはありますか? パフォーマンスを維持したいと同時に、エラー Bean を埋めなければなりません。正規表現 (例: 登録フォーム) で複雑な、より多くのチェックを含むより多くのフィールドを配置したい場合はどうなりますか? その機能はまだ良いでしょうか?私が従いたい基本原則は次のとおりです。すべてのテストに合格した場合にのみ、フラグに true を割り当てます (またはコードを入力します)。それ以外の場合は false になります (デフォルト)。その逆ではありません (フラグはデフォルトで true ですが、false になる可能性があります)。

私の英語が悪く聞こえたら、遠慮なく訂正してください。ありがとう。

public boolean validate(FormBean bean, FormErrorBean error)
    {
        // the validation flag
        boolean valid = false;

        if (bean instanceof LoginFormBean)
        {
            // check not null
            if (!bean.isEmpty())
            {
                String username = ((LoginFormBean) bean).getUsername();
                String password = ((LoginFormBean) bean).getPassword();

                if ((!username.isEmpty()) && (!password.isEmpty()))
                {
                    // create the DAO
                    UserDao uDao = new UserDao();

                    // check the user
                    valid = uDao.checkUser((LoginFormBean) bean);

                    // set the validation status of the bean
                    ((LoginFormBean) bean).setValid(valid);

                    // add the error, if any
                    if (!valid)
                        error.addError("Either the username is not valid or the password is wrong.");
                }
                else
                {
                    if(username.isEmpty())
                        error.addError("username", "Username is mandatory.");
                    if(password.isEmpty())
                        error.addError("password", "Password is mandatory.");
                }
            }
            else
            {
                // add the empty error...
                error.addError("Both the username and password are missing.");
            }
        }
        return valid;
    }
4

2 に答える 2

1

私の知る限り、テスト式は 2 回実行されます。

username.isEmpty() と password.isEmpty() を何度も実行する場合は、最初にそれらをブール値として保存できます。これにより、理論的にはオーバーヘッドをわずかに節約できます。ただし、おそらくその結果を何度も必要としないことを考えると、パフォーマンスの向上は無視できます。

正規表現を使用して一意のチェックを追加する場合、その結果を再利用する必要があるとは思えません。あなたのコードはそのままでうまく構成されていると思います。

于 2013-03-29T09:45:09.027 に答える
1

java は式 username.isEmpty() と password.isEmpty() を 2 回テストしますか?

はい、同じメソッドを 2 回呼び出す場合。

同じテストをやり直さないように、最初のテストの結果を「保存」する内部メカニズムはありますか?

結果を 2 つの異なるブール値 (それぞれに 1 ビット) に格納することができます。

boolean isPasswordEmpty = password.isEmpty();
boolean isUsernameEmpty = username.isEmpty(); 

そして、それらをテストに使用してください。

正規表現 (例: 登録フォーム) で複雑な、より多くのチェックを行うより多くのフィールドを配置したい場合はどうなりますか? その機能はまだ良いでしょうか?

前進したい場合は、Spring Web または Apache Struts をフォームの検証と認証の方法論に使用してみてください。

私が従いたい基本原則は次のとおりです。すべてのテストに合格した場合にのみ、フラグに true を割り当てます (またはコードを入力します)。それ以外の場合は false になります (デフォルト)。その逆ではありません (フラグはデフォルトで true ですが、false になる可能性があります)。

あなたの次のステップは次のようになると思います。したがって、いくつかのパターンを使用してみてください (必要なものを格納し、アプリケーション レベルでデータを転送する DTO など)。

コードに注意を払うことをお勧めします。

if (!bean.isEmpty())、username.isEmpty() など

NullPointerException が実行可能であるためです。オブジェクトにアクセスする前に、オブジェクトが null でないことを確認する必要があります。

それが役立つことを願って、

さよなら

于 2013-03-29T09:46:03.473 に答える