我正在做这个初学者Struts2 login tutorial
我得到它的工作,除了,当访问登录页面时,它不会首先找到标签的属性。所以代替:
我得到登录页面:
和错误页面:
但是,通过使用简单的属性标记<s:property value="username" />
来确定登录成功时的属性
我在这里俯瞰什么?
的Login.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>
struts.xml包含的login.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.
文件结构:
答案 0 :(得分:1)
阅读this后,它似乎是一个文件结构问题。显然属性文件需要在WEB-INF下。我使用的结构是在遵循NetBeans framework tutorial之后将框架指定为Struts2时提供的,其中{{3}}具有不属于WEB-INF的属性的示例项目。
答案 1 :(得分:0)
您可以将所有操作的所有资源放在默认的struts资源bundel中,或者将每个操作资源放入其自己的packge中。
我建议第一种方法可以消除大量重复,您可以使用 jrc-editor 轻松管理所有资源包。
因此,在运行服务器后的示例中,必须将文件复制到 WEB-INF / classes / resources / 然后
<constant name="struts.custom.i18n.resources"
value="resources/login/Credentials.properties" />
PS:你可以拥有
<constant name="struts.custom.i18n.resources"
value="resources/login/Credentials.properties,resources/login/Otherfile.properties" />
答案 2 :(得分:0)
使用&lt; s:message&gt;
<s:form action="login.action" method="post">
<s:message code="label.username" text="defUsername">
<s:textfield name="username" size="20" />
<s:message code="label.password" text="defPassword">
<s:password name="password" size="20" />
<s:submit method="authenticate" align="center" >
<s:message code="label.login" var="var_lbl_login">
</s:submit>
</s:form>