0

無効なユーザーがログインしようとすると、エラー パラメータが 1 のログイン アクションにリダイレクトするログイン ページを作成しています。

private String username;
private String password;
private int error;
@Override
public String execute()
{
    //validate user input
    if (username == null || password == null || username.isEmpty() || password.isEmpty())
    {
        error = 2;
        return LOGIN;   
    }

    LoginModel loginModel = new LoginModel(username, password);

    HttpBuilder<LoginModel, User> builder = new HttpBuilder<LoginModel, User>(User.class);
    builder.setPath("service/user/authenticate");
    builder.setModel(loginModel);

    IHttpRequest<LoginModel, User> request = builder.buildHttpPost();
    User user = request.execute(URL.BASE_LOCAL);

    //redirects to login page
    if (user == null)
    {
        error = 1;
        return LOGIN;
    }
    else
    {   
        return SUCCESS;
    }
}

   //Getters/Setters

無効なユーザーがログインしようとすると、localhost:8080/app/login.action?error=1 にリダイレクトされます。if タグを使用してエラー パラメータにアクセスし、ユーザーにエラー メッセージを表示しようとしていますが、メッセージが表示されません。

<s:if test="error == 1">
<center>
    <h4 style="color:red">Username or Password is invalid!!</h4>
</center>

私は何を間違っていますか?

4

2 に答える 2

2

私に関する限り、あなたが間違っているのは、フレームワークを完全に無視していることです。

おおよそ、IMO これは次のようになります。

public class LoginAction extends ActionSupport {

    private String username;
    private String password;

    @Override
    public String validate() {
        if (isBlank(username) || isBlank(password)) {
            addActionError("Username or Password is invalid");
        }

        User user = loginUser(username, password);
        if (user == null) {
            addActionError("Invalid login");
        }
    }

    public User loginUser(String username, String password) {
        LoginModel loginModel = new LoginModel(username, password);

        HttpBuilder<LoginModel, User> builder = new HttpBuilder<LoginModel, User>(User.class);
        builder.setPath("service/user/authenticate");
        builder.setModel(loginModel);

        IHttpRequest<LoginModel, User> request = builder.buildHttpPost();
        return request.execute(URL.BASE_LOCAL);
    }

}

フォームを含む結果が得られ、"input"必要なスタイルを使用して存在するアクション エラーが表示されます。ログインエラーのタイプに基づいてスタイルを変更することが重要な場合は、さらにいくつかのゲームをプレイする必要がありますが、それは過剰に思えます.

無関係ですが、そのloginUserコードをアクションから完全にユーティリティ/サービスクラスに移動しますが、少なくとも別のメソッドにまとめることで、より簡単にモックできます。それは確かにメソッドに属していません。execute

于 2013-07-22T17:41:33.893 に答える
0

値スタックからアクセスするには、フィールド「エラー」のゲッターセッターを提供する必要があります。

public int getError() 
{
   return error;
}

public void setError(int error) 
{
   this.error = error;
}

OGNL でアクセスしてみます。

<s:if test="%{#error==1}"></s:if>

またはJSTLを使用:

<c:if test="${error==1}"></c:if>
于 2013-07-22T17:27:13.480 に答える