2013-07-22 74 views
0

我寫一個登錄頁面,當一個無效的用戶嘗試登錄我重定向到一個錯誤的參數登錄操作等於1Struts2的標籤,如果沒有工作

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> 

我在做什麼錯?

+0

顯示你的'struts.xml'文件。 –

回答

0

您需要提供吸氣器設置器字段'錯誤'才能從值堆棧訪問它。

​​

並嘗試訪問它在OGNL:

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

或使用JSTL:

<c:if test="${error==1}"></c:if> 
+0

我在動作中使用了這些方法。 –

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方法。

+0

當使用redirectAction結果類型到該操作的jsp頁面時,是否可以顯示錯誤消息? –

+1

不可以。動作和現場錯誤是每個請求。 –

+0

你爲什麼重定向以再次顯示登錄頁面?你不在登錄頁面嗎? –