Я делаю этот руководство по входу в Struts2 для начинающих. у меня это работает, за исключением того, что при доступе к странице входа в систему сначала не находят атрибуты для меток. Поэтому вместо:
я получаю страницу входа:
И страница ошибки:
Однако он находит атрибут при успешном входе в систему с помощью простого тега свойства <s:property value="username" />
Что я здесь упускаю?
Логин.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>Struts 2 - Login Application</title>
</head>
<body>
<h2>Struts 2 - Login Application</h2>
<s:actionerror />
<s:form action="login.action" method="post">
<s:textfield name="username" key="label.username" size="20" />
<s:password name="password" key="label.password" size="20" />
<s:submit method="authenticate" key="label.login" align="center" />
</s:form>
</body>
</html>
Welcome.jsp (при успешном входе в систему)
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>Welcome</title>
</head>
<body>
<h2>Howdy, <s:property value="username" />...!</h2>
</body>
</html>
login.xml, включенный в struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
'-//Apache Software Foundation//DTD Struts Configuration 2.0//EN'
'http://struts.apache.org/dtds/struts-2.0.dtd'>
<struts>
<constant name="struts.custom.i18n.resources"
value="Credentials" />
<package name="Login" namespace="/login" extends="struts-default">
<action name="login"
method ="authenticate"
class="Login.LoginAction">
<result name="success">/login/Welcome.jsp</result>
<result name="error">/login/Login.jsp</result>
</action>
</package>
</struts>
Класс LoginAction:
package Login;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport{
private String username;
private String password;
public String authenticate() {
if (this.username.equals("admin")
&& this.password.equals("admin123")) {
return "success";
} else {
addActionError(getText("error.login"));
return "error";
}
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Файл свойств Credentials.properties
label.username= Username
label.password= Password
label.login= Login
error.login= Invalid Username/Password. Please try again.
Структура файла: