【问题标题】:Why is jsp not seeing default attribute in property file?为什么jsp在属性文件中看不到默认属性?
【发布时间】:2014-04-03 12:31:28
【问题描述】:

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

我得到登录页面:

和错误页面:



但是,当登录成功时,它会使用简单的属性标签 <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>

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.

文件结构:

【问题讨论】:

    标签: jsp properties struts2 struts-tags


    【解决方案1】:

    看了this,看来是文件结构问题。显然,属性文件需要放在 WEB-INF 下。我使用的结构是在遵循NetBeans framework tutorial 之后将框架指定为 Struts2 后提供的,它有一个示例项目,其属性不在 WEB-INF 下。

    【讨论】:

    • 实际上,我现在不认为它是目录问题。因为仔细检查它,示例项目不在 WEB-INF 下,但它仍然有效。我将上传我的文件结构的图片。问题似乎是,在提交表单/提供操作之前它不会访问属性。示例项目不需要这样做。
    • 示例文件没有指定属性名称,所以我已将 Credentials.properties 重命名为 package.properties,现在它可以在错误页面上正确访问,但在操作之前仍然没有在初始页面上发生了。
    【解决方案2】:

    您可以将所有动作的所有资源放在默认的struts资源包中,或者将每个动作资源放在自己的包中。

    我建议第一种方法可以消除大量重复,您可以使用 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" />
    

    【讨论】:

    • 我不记得解决方案是什么,但这听起来是最可能的答案,所以我接受了它,因为我已经有几年没有重新审视这个项目了。
    【解决方案3】:

    使用

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

    【讨论】:

    • 没有&lt;s:message&gt;这样的东西。
    猜你喜欢
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    • 2022-10-20
    • 2011-09-24
    • 2010-12-06
    • 2023-01-21
    相关资源
    最近更新 更多