我正在编写一个登录页面,当无效用户尝试登录时,我会重定向到登录操作,错误参数等于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>
我做错了什么?
答案 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"
结果,并使用您想要的任何样式显示任何操作错误。如果 critical 根据登录错误的类型更改样式,则必须再玩几个游戏,但这似乎过多。
不相关,但我会将loginUser
代码完全移出操作并进入实用程序/服务类,但至少用它包裹在一个单独的方法中你可以更容易嘲笑它。肯定不属于execute
方法。
答案 1 :(得分:0)
您需要提供 getter 和 setter 字段&#39;错误&#39;从价值堆栈访问它。
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>