2013-07-22 41 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

你为什么重定向以再次显示登录页面?你不在登录页面吗? –