我有一个抽象类,如下所示,带有用于私有属性的适当的 getter 和 setter(为了保持帖子排序而省略):
public abstract class CityDistanceAwareAction extends BaseAction implements Preparable {
private CityDistanceRepository cityDistanceRepository;
private CityRepository cityRepository;
private String cityA;
private String cityB;
private CityDistance cityDistance;
public void prepare() {
if (StringUtils.isNotBlank(cityA) && StringUtils.isNotBlank(cityB)) {
CityPair cityPair = new CityPair(getCityRepository().findByName(cityA), getCityRepository().findByName(cityB));
setCityDistance(getCityDistanceRepository().load(cityPair));
}
}
}
然后我有一个非常简单的类,如下所示:
public class SearchCityDistanceAjaxAction extends CityDistanceAwareAction {
@Override
public String perform() {
if (getCityDistance() == null) {
addActionError("No city distance found for that pair");
return ERROR;
}
return SUCCESS;
}
}
这个想法是我可以发送字符串 cityA 和字符串 cityB。做我的查找并cityDistance
通过 AJAX 简单地返回对象。
struts.xml
当我按如下方式设置我的操作时:
<action name="searchCityDistance" class="searchCityDistanceAjaxAction">
<result type="json">
<param name="includeProperties">
cityDistance.*
</param>
</result>
<result name="error" type="json">
<param name="ignoreHierarchy">false</param>
<param name="includeProperties">
actionErrors.*
</param>
</result>
</action>
我得到以下回报:
(CommonsLogger.java:68) - 添加包含属性表达式:cityDistance.* (CommonsLogger.java:68) - [JSON]{}
但我希望得到cityDistance.*
抽象中 getter 提供的对象CityDistanceAwareAction
。
有趣的是,如果我在SearchCityDistanceAjaxAction
对象上添加一个特殊的 getter,如下所示:
public CityDistance getAjaxCityDistance() {
return getCityDistance();
}
并将struts文件更改为:
<result type="json">
<param name="includeProperties">
ajaxCityDistance.*
</param>
</result>
它给了我我第一次尝试的期望。
(CommonsLogger.java:68) - 添加包含属性表达式:ajaxCityDistance.* (CommonsLogger.java:68) - [JSON]{"ajaxCityDistance":{"cityPair":{"cityA":{"cityName":"American Falls ","id":68},"cityB":{"cityName":"Ririe","id":119}},"distance":85}}
最好从 my 中删除 getter,SearchCityDistanceAjaxAction
因为父级中已经提供了 getter。这里有什么我遗漏的东西还是它应该起作用的方式?
提前致谢。