我有一个抽象类,看起来像下面的私有属性的适当的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;
}
}
我的想法是我可以发送一个String cityA和String cityB。做我的查找并简单地通过AJAX返回cityDistance
对象。
当我按如下方式设置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] {&#34; ajaxCityDistance&#34; {&#34;城市对&#34; {&#34; cityA&#34; {&#34;的cityName&#34;:&#34;美国 瀑布&#34;&#34; ID&#34; 68},&#34; cityB&#34; {&#34;的cityName&#34;:&#34; Ririe&#34;&#34; ID& #34; 119}},&#34;距离&#34; 85}}
理想的是从我的SearchCityDistanceAjaxAction
中移除getter,因为父级已经提供了getter。我在这里缺少什么,或者它应该如何运作?
提前致谢。
答案 0 :(得分:0)
我能够将struts.xml文件更改为以下内容:
<action name="searchCityDistance" class="searchCityDistanceActionAjaxAction">
<result type="json">
<param name="ignoreHierarchy">false</param>
<param name="excludeProperties">
cityDistanceRepository
</param>
<param name="includeProperties">
cityDistance.*
</param>
</result>
<result name="error" type="json">
<param name="ignoreHierarchy">false</param>
<param name="includeProperties">
actionErrors.*
</param>
</result>
</action>
但是使用excludeProperties来省略我的cityDistanceRepository仍然有点可疑。如果这是必须的,我想这就是我要做的,但希望有更好的解决方案。