setter和getter方法无法识别

时间:2015-11-04 00:34:15

标签: java struts2

我是strut2初学者,我正在测试我的第一个hello world示例。这是我的动作类:

package com.tutorialspoint.struts2;

public class HelloWorldAction {
    private String myname  = "";

    public String execute() throws Exception {
        System.out.println("Execute successfully");
        return "success";
    }

    public String getMyname() {
        return this.myname;
    }

    public void setMyname(String name) {
        System.out.println("myName is set");
        this.myname = name;
    }
}

这是第一页:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello World</title>
</head>
<body>
<h1>Hello World From Struts2</h1>
   <form action="hello">
      <label for="myName">Please enter your name</label><br/>
      <input type="text" name="myname" value="No name"/>
      <input type="submit"/>
   </form>
</body>
</html>

第二页:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello World</title>
</head>
<body>
    Hello World, <s:property value="myname"/>
</body>
</html>

最后是配置文件:

<?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.devMode" value="true" />
   <package name="helloworld" extends="struts-default">

      <action name="hello" 
            class="com.tutorialspoint.struts2.HelloWorldAction" 
            method="execute">
            <result name="success">/HelloWorld.jsp</result>
      </action>
   </package>
</struts>

问题是,当我按下输入名称的按钮时,会显示错误:

com.opensymphony.xwork2.interceptor.ParametersInterceptor error
Unexpected Exception caught setting 'myname' on 'class com.tutorialspoint.struts2.HelloWorldAction: Error setting expression 'myname' with value ['No name', ]

如果我在动作类中将属性'myname'更改为'name'以及相应的jsp文件,它运行良好且没有错误。 请提出修复建议。

3 个答案:

答案 0 :(得分:1)

只需检查您的jar文件。 我只是复制粘贴你的代码在我的项目中,它运行正常没有任何错误

答案 1 :(得分:1)

请遵循POJO类中变量中camelCase的命名约定。我发现Struts2非常敏感。

我面临一个问题:如果你命名一个变量eMail,那么struts将无法用于此。如果将其重命名为elecMail,那么它将起作用。

参见模式:eMail将setter和getter方法设置为setEMail()和getEMail(),即两个连续的大写字母。 Struts在查找setter方法名称时可能会有一些缺陷。

可能是你面临的类似事情。

答案 2 :(得分:0)

最后,我找到了问题的原因。更改属性名称,方法名称和jsp文件后,我们必须重新启动服务器。仅刷新浏览器会导致问题。是否扩展ActionSuppport并不会影响问题。