为什么jsp没有在属性文件中看到默认属性?

时间:2014-04-03 12:31:28

标签: jsp properties struts2 struts-tags

我正在做这个初学者Struts2 login tutorial 我得到它的工作,除了,当访问登录页面时,它不会首先找到标签的属性。所以代替: enter image description here

我得到登录页面:

enter image description here 和错误页面:

enter image description here

但是,通过使用简单的属性标记<s:property value="username" />来确定登录成功时的属性 enter image description here

我在这里俯瞰什么?

的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.

文件结构:
enter image description here

3 个答案:

答案 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>