Java 从父抽象类调用getter方法

Java 从父抽象类调用getter方法,java,inheritance,struts,abstract-class,Java,Inheritance,Struts,Abstract Class,这就是我的课程的样子: public abstract class BaseForm extends Z{ protected String someString; public String getSomeString(){ return this.someString; } public void setSomeString(String some){ this.someString = some; } } 所以

这就是我的课程的样子:

public abstract class BaseForm extends Z{
    protected String someString;

    public String getSomeString(){
        return this.someString;
    }

    public void setSomeString(String some){
        this.someString = some;
    }
}

所以我有一些类似于你在上面看到的东西。当我创建一个JSP并尝试调用
get/setListOfThings
方法时,问题就出现了

<html:html>
    ...
    <html:select name="FinalForm" property="selectedThing">
        <html:optionsCollection name="FinalForm" property="listOfThings" label="label" value="value" />
    </html:select>
    ...
</html:html>
我希望避免这种重写,因为创建
AdvancedForm
类的目的是删除大多数表单正在使用的许多功能(但不是全部,这是存在
BaseForm
AdvanceForm
类的原因)


你知道为什么这不起作用吗?有什么改进的办法吗?谁能向我解释我做错了什么?提前谢谢

您需要在超类中将方法
公开
而不是
受保护
,否则Struts类将无法看到它。

仅因为方法受保护,它才不起作用。一旦您重写它,它就会工作,因为您将重写方法公开

只要将基本方法公开(几乎)就可以了


提交表单后,应调用
setSelectedThing
方法。问题在于Struts无法神奇地将它在请求中接收到的
字符串
参数转换为
某物
实例。
selectedThing
属性的getter和setter应该使用
String
而不是
Something
,您的函数肯定会工作得很好。但是,如果在struts json中呈现结果,它将不会获得超类属性。 如果是json,则必须按照以下方式定义struts.xml

<result type="json">
  <param name="ignoreHierarchy">false</param>
</result>

假的

类似的讨论:

谢谢你的回答。这是我的错误,getter和setter都是公共的,我要编辑这个问题对不起,我在方法中写了protected而不是public。它们已经是公开的(getter和setter)。我必须对变量做同样的处理吗?我已经编辑了我的答案。变量应该是私有的。Struts和JSPEL只通过它们的getter和setter访问属性。我试图将AdvancedForm中的所有内容都更改为public,但没有成功。唯一可行的方法是在FinalForm中创建getter和setter,这个方法调用super方法。
<html:html>
    ...
    <html:select name="FinalForm" property="selectedThing">
        <html:optionsCollection name="FinalForm" property="listOfThings" label="label" value="value" />
    </html:select>
    ...
</html:html>
public class FinalForm extends AdvancedForm{
    //...
    public List<Something> getListOfThings(){
        return super.getListOfThings();
    }
}
<result type="json">
  <param name="ignoreHierarchy">false</param>
</result>