Имам абстрактен клас, който изглежда по следния начин с подходящи гетери и сетери за частни свойства (оставени, за да запазя сортирането на публикацията):
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. Направете моите справки и просто върнете обекта 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.*
, предоставен от гетъра в абстрактното CityDistanceAwareAction
.
Достатъчно интересно, ако добавя специален инструмент за получаване на обекта SearchCityDistanceAjaxAction
като следното:
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}}
Би било идеално да премахна getter от моя SearchCityDistanceAjaxAction
, тъй като getter вече е предоставен в родителя. Има ли нещо, което пропускам тук или това е начинът, по който трябва да функционира?
Благодаря предварително.
getCityDistance()
метод във вашияCityDistanceAwareAction
клас? - person Aleksandr M   schedule 26.09.2013getCityDistance()
метод вCityDistanceAwareAction
. - person buzzsawddog   schedule 26.09.2013