簡體   English   中英

Struts2如果標簽不起作用

[英]Struts2 if tag not working

我正在編寫一個登錄頁面,當無效用戶嘗試登錄時,我將重定向到登錄操作,錯誤參數等於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>

我究竟做錯了什么?

就我而言,你所做錯的是完全無視框架。

粗略地說,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方法。

您需要提供字段'error'的gettersetter以從值堆棧訪問它。

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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM