Struts2一个怪异的问题:getter不能在父类中定义

FreeDove 2011-07-05 02:57:32
PersonAction.java

public PersonAction extends AbstractAction {
private String name;
//getter、setter
.............
}


在父抽象类中,如果预定义了name的getter方法,类似
AbstractAction.java

public abstract AbstractAction extends com.opensymphony.xwork2.ActionSupport {
public String getName() {
return ...;
}
}



public abstract AbstractAction extends com.opensymphony.xwork2.ActionSupport {
public abstract String getName();
}

那么在页面中action提交过来的name将不被获取,什么道理,还是有什么深奥的问题在里面,往高人指点。
如果去掉父类AbstractAction 的getName()方法声明,就恢复正常,PersonAction也能获取页面提交过来的name属性值。
...全文
247 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
贪睡的兔子 2011-07-08
  • 打赏
  • 举报
回复
子类中的方法当然要在父类中有抽象方法 不然用多态是调用不了的
pkl1984 2011-07-08
  • 打赏
  • 举报
回复
oh my lady gaga
继续修改
public abstract class AbstractAction extends com.opensymphony.xwork2.ActionSupport {
public abstract String getName();
}
pkl1984 2011-07-08
  • 打赏
  • 举报
回复
public abstract AbstractAction extends com.opensymphony.xwork2.ActionSupport {
public abstract String getName();
}
补充楼上
pkl1984 2011-07-08
  • 打赏
  • 举报
回复
public abstract AbstractAction extends com.opensymphony.xwork2.ActionSupport {
public abstract String getName();
}
在 myEclipe 显示有错误 改成
public abstract AbstractAction extends com.opensymphony.xwork2.ActionSupport {
public abstract String getName();
}
可用,测试了可以取到值
ljy66 2011-07-08
  • 打赏
  • 举报
回复
报了什么错。可否帖出来?[Quote=引用 7 楼 freedove 的回复:]

上面写多了一句话,父类的第二个写法没问题。第一个写法有问题是因为多了一个getName()的方法。去掉这个getName()抽象方法就正确了。

代码直接复制进eclipse肯定不会报错,不知道你还要求什么代码?
[/Quote]
ljy66 2011-07-08
  • 打赏
  • 举报
回复

package test;
public abstract AbstractAction extends com.opensymphony.xwork2.ActionSupport {
public abstract String getName();
}

这个也没错啊,一样可以取值啊。
FreeDove 2011-07-08
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 dikeboy1234 的回复:]

子类中的方法当然要在父类中有抽象方法 不然用多态是调用不了的
[/Quote]

什么意思?这个和struts有关吗。我这样写的确是在父类中需要调用子类的name属性,所以就在父类这里声明了一下。
现在还找不到原因,暂时做个折中的办法,把name及其getter和setter都挪到父类中来,子类就不写了。

谢谢大家,再等等几天看看有没有更好的建议就结贴了。
FreeDove 2011-07-08
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 pkl1984 的回复:]

public abstract AbstractAction extends com.opensymphony.xwork2.ActionSupport {
public abstract String getName();
}
在 myEclipe 显示有错误 改成
public abstract AbstractAction extends com.opensymphony.……
[/Quote]

谢谢,可是看不到你写的前后两个有啥区别哈~~

大家的都可以取值,看上去肯定就是我代码有问题了,可是别的地方全都一样,能否取到值差别仅是是否注释掉父类的这个getName()抽象方法了。
FreeDove 2011-07-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ljy66 的回复:]

报了什么错。可否帖出来?引用 7 楼 freedove 的回复:

上面写多了一句话,父类的第二个写法没问题。第一个写法有问题是因为多了一个getName()的方法。去掉这个getName()抽象方法就正确了。

代码直接复制进eclipse肯定不会报错,不知道你还要求什么代码?
[/Quote]
谢谢,没报错,只是取不到值而已,用断点查看是null
ljy66 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 planet649 的回复:]

一直这么用,没有问题。请楼主放上全部代码
[/Quote] 就现在的代码来看。你是让我们玩,你猜猜猜的游戏吗?
FreeDove 2011-07-07
  • 打赏
  • 举报
回复
我只要在子类中实现getter和setter就行了,父类我要只声明一个abstract的getter。为什么在父类也必须要声明一个abstract的setter?

代码上面都写清楚了,大家最好还是自己试试呵~~

就一句简单的:子类都有getter、setter方法,但如果父类声明了abstract的getter,就会取不到值,把父类的这个abstract的声明去掉,别的都不动,就全好了。

楼上没看清问题啊,如果是你说那种情况,那为什么我只是把父类的声明去掉就全好了?
FreeDove 2011-07-07
  • 打赏
  • 举报
回复
上面写多了一句话,父类的第二个写法没问题。第一个写法有问题是因为多了一个getName()的方法。去掉这个getName()抽象方法就正确了。

代码直接复制进eclipse肯定不会报错,不知道你还要求什么代码?
FreeDove 2011-07-07
  • 打赏
  • 举报
回复
现在代码不知道还有哪部分不清楚的,我再抄一遍下来好了:

子类:

package test;
public PersonAction extends AbstractAction {
private String name;
public String getName(){
return name;
}
public void setName(String name) {
this.name = name;
}
}


父类(这样写法是有问题,页面Form提交的name属性取不到):

package test;
public abstract AbstractAction extends com.opensymphony.xwork2.ActionSupport {
public abstract String getName();
}

父类(如果这样写就没问题):
父类(这样写法是有问题,页面Form提交的name属性取不到):

package test;
public abstract AbstractAction extends com.opensymphony.xwork2.ActionSupport {
}
Fly_m 2011-07-05
  • 打赏
  • 举报
回复
你只在父类有get方法,没有set??

set和get是一对的,在struts2的,对于参数获取,通常都要同时使用set和get的。

而且,你的get和set最好对应同一个对象,如都是xxx,不然,就会出现你所说的问题。

原理:
为属性x设置值a,相应于调用 你的action.getX().setA(),如果action.getX()没有,就会调用action.setX()设置一个新的X.
dxbedu 2011-07-05
  • 打赏
  • 举报
回复
同感奇怪,坐等结论~
  • 打赏
  • 举报
回复
一直这么用,没有问题。请楼主放上全部代码
代码下载地址: https://pan.quark.cn/s/a4b39357ea24 ### HSMS/SEMI通讯E37说明书文关键知识点 #### 一、HSMS概述 - **HSMS**(High-Speed SECS Message Service)是一种专为半导体工厂内部计算机之间进行高速消息传输而构建的通信标准。该标准旨在逐步取代原有的SEMIE4(SECS-I)和SEMIE13(SECS Message Service),特别是在需要高速数据交换或简单的点对点拓扑结构无法满足实际需求的情况下。 - HSMS的核心宗旨在于提供一种机制,使来自不同制造商的设备能够达成无缝对接和互操作状态,即便这些设备在设计理念和通信机制上存在显著差异。 - HSMS不仅适用于TCP/IP优先于OSI模型的应用环境,同时也能作为SEMIE4和SEMIE13的有效替代方案。 #### 二、HSMS的应用范围 - HSMS主要部署于半导体制造业的计算机系统之间进行消息交换的场景,如自动化生产线、设备监控系统等。 - 该标准界定了通信接口,使得半导体工厂内的各类设备能够实现高效且可靠的数据传输。 #### 三、HSMS与其他标准的关系 - **SEMIE4 (SECS-I)**:规定了消息传输的基本规则和格式。 - **SEMIE5 (SECS-II)**:明确了消息的具体内容和结构。 - **IETF Documents**: - RFC791 - Internet协议 - RFC792 - Internet控制消息协议 - RFC793 - 传输控制协议 - RFC1120 - Internet主机通信层的要求 - RFC1340 - 指定号码 - **POSIX D...
内容概要:本文系统研究了虚拟同步发电机(VSG)的惯量-阻尼协同自适应并网控制策略,旨在提升微电网在并网过程的频率稳定性与动态响应能力。通过Simulink搭建VSG控制模型,结合Matlab实现算法仿真,深入分析了惯量与阻尼参数的自适应调节机制,并融合黑启动、预同步控制、虚拟阻抗等关键技术,有效增强了系统在电网频率波动下的鲁棒性与功率分配均衡性。研究不仅构建了完整的VSG双机并联仿真平台,还验证了所提控制策略在微电网黑启动、并网切换及负载突变等典型工况下的可行性与优越性,为新能源并网系统的稳定性控制提供了理论依据与技术支撑。; 适合人群:具备电力系统、自动化、电气工程等相关专业背景,熟悉Matlab/Simulink仿真环境,从事新能源并网、微电网控制、虚拟同步机技术、电力电子与电力系统稳定性研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握虚拟同步发电机的核心控制原理及其在微电网的应用;②学习惯量与阻尼参数的协同自适应调控方法,提升系统频率响应性能;③通过Simulink搭建双机并联VSG系统,完成黑启动、预同步、功率均分等关键过程的仿真验证;④为科研论文复现、课题设计或实际工程项目提供可复用的模型与算法参考。; 阅读建议:建议读者结合文所述仿真模型与代码资源,按照控制策略的设计流程逐步实践,重点关注参数整定、控制环路设计及系统稳定性判据的分析。推荐关注公众号“荔枝科研社”获取完整资料包,以便深入理解并拓展至更复杂的多源协同控制场景。

81,111

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧