У меня есть класс Action с 4 методами действия.
Все четыре метода действия действия используют результат json.
Посредством записи операторов и отладки я проверил, что если я вызываю метод действия 1, также вызываются методы действия 2 и 3. Но не 4. Наконец, метод действия 1 вызывается снова и генерируется результат json
Если я изменю тип результата метода действия 1 на диспетчер по умолчанию с расположением jsp, вызывается только метод действия 1. (это поведение, которое я хочу с результатом JSON)
Надеюсь, что это имеет смысл.
У кого-нибудь есть идеи?
Этот вопрос был задан здесь https://stackoverflow.com/questions/3767698/struts2-if-result-type-json-and-method-defined-then-all-methods-get-invoked
Но ответа не было.
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.
@ResultPath("/WEB-INF/jsp/dta/")
public class GroupEntityAction extends BaseAction {
/**
*
*/
private static final long serialVersionUID = 6750675222824235086L;
private static Logger log = Logger.getLogger(GroupEntityAction.class);
private List<EntityBusiness> theUnusedEntityBusinessList;
private String assignedEntities[];
private long groupId;
private long businessId;
private String parentMe;
private long rptYear;
private String ssoId;
private String isSubmitted;
private String delimGoLiveEmails;
private List<String> theEmailList;
@Action(value = "ajaxGetAvailableEntityList",
results = { @Result(name = "success", type = "json") }
,
interceptorRefs = { @InterceptorRef("dtaStack"),
@InterceptorRef(value = "dtaStack", params = { "appInterceptor.allowedRoles", "ADMIN" }) }
)
public String getEntityListsByBusiness() throws Exception {
if (rptYear == 0) {
return SUCCESS;
}
LookupService theSvc = new LookupService();
if (businessId != 0) {
setTheUnusedEntityBusinessList(theSvc.getAvailableEntityListBizExceptIds(rptYear, businessId, ssoId, assignedEntities));
} else {
setTheUnusedEntityBusinessList(theSvc.getAvailableEntityListParentMeExceptIds(rptYear, parentMe, ssoId, assignedEntities));
}
log.debug(theUnusedEntityBusinessList.size());
return SUCCESS;
}
@Action(value = "ajaxToggleGroupBusinessSubmitted",
results = { @Result(name = "success", type = "json") }
,
interceptorRefs = { @InterceptorRef("dtaStack") }
)
public String toggleGroupBusinessReview() {
try {
new ProformaService().toggleIsSubmitted(getCurrentUser().getSsoId(), groupId, rptYear, businessId);
} catch (SQLException e) {
log.error(e.getMessage());
return ERROR;
}
return SUCCESS;
}
@Action(value = "ajaxGetGoLiveEmailList",
results = { @Result(type = "json") }
,
interceptorRefs = { @InterceptorRef("dtaStack"),
@InterceptorRef(value = "dtaStack", params = { "appInterceptor.allowedRoles", "ADMIN" }) }
)
public String getGoLiveEmailList() {
try {
List<TaxUser> theUserList = new SecurityService().getAll();
List<String> theEmailList = new ArrayList<String>();
for (TaxUser theUser : theUserList) {
if ((!theUser.getRoles().contains("ADMIN")) && (theUser.getIsActive().equalsIgnoreCase("Y"))) {
if (!theEmailList.contains(theUser.getEmail())) {
theEmailList.add(theUser.getEmail());
}
}
}
setDelimGoLiveEmails(StringUtils.join(theEmailList.toArray(), "|"));
setTheEmailList(theEmailList);
} catch (SQLException e) {
log.error(e.getMessage());
return ERROR;
}
return SUCCESS;
}
@Action(value = "ajaxGetChaserEmailList",
results = { @Result(name = "success", type = "json") }
,
interceptorRefs = { @InterceptorRef("dtaStack"),
@InterceptorRef(value = "dtaStack", params = { "appInterceptor.allowedRoles", "ADMIN" }) }
)
public String getChaserEmailList() {
try {
List<String> theEmailList = new LookupService().getChaserEmailList();
setDelimGoLiveEmails(StringUtils.join(theEmailList.toArray(), "|"));
setTheEmailList(theEmailList);
} catch (SQLException e) {
log.error(e.getMessage());
return ERROR;
}
return SUCCESS;
}
public void setTheUnusedEntityBusinessList(
List<EntityBusiness> theUnusedEntityBusinessList) {
this.theUnusedEntityBusinessList = theUnusedEntityBusinessList;
}
public List<EntityBusiness> getTheUnusedEntityBusinessList() {
return theUnusedEntityBusinessList;
}
public void setAssignedEntities(String assignedEntities[]) {
this.assignedEntities = assignedEntities;
}
public String[] getAssignedEntities() {
return assignedEntities;
}
public void setGroupId(long groupId) {
this.groupId = groupId;
}
public long getGroupId() {
return groupId;
}
public void setBusinessId(long businessId) {
this.businessId = businessId;
}
public long getBusinessId() {
return businessId;
}
public void setParentMe(String parentMe) {
this.parentMe = parentMe;
}
public String getParentMe() {
return parentMe;
}
public void setRptYear(long rptYear) {
this.rptYear = rptYear;
}
public long getRptYear() {
return rptYear;
}
public void setSsoId(String ssoId) {
this.ssoId = ssoId;
}
public String getSsoId() {
return ssoId;
}
public void setIsSubmitted(String isSubmitted) {
this.isSubmitted = isSubmitted;
}
public String getIsSubmitted() {
return isSubmitted;
}
public void setDelimGoLiveEmails(String delimGoLiveEmails) {
this.delimGoLiveEmails = delimGoLiveEmails;
}
public String getDelimGoLiveEmails() {
return delimGoLiveEmails;
}
public void setTheEmailList(List<String> theEmailList) {
this.theEmailList = theEmailList;
}
public List<String> getTheEmailList() {
return theEmailList;
}
}
В этом классе действий я пытаюсь вызвать ajaxGetGoLiveEmailList
, и я получаю сначала ajaxGetGoLiveEmailList
, а затем ajaxGetChaserEmailList
, а затем ajaxGetAvailableEntityList
, а затем ajaxGetGoLiveEmailList
снова вызывается. ajaxToggleGroupBusinessSubmitted
пропущено.
Если я изменю аннотацию результата с ajaxGetGoLiveEmailList
на
results={@Result(location="something.jsp")
, только ajaxGetGoLiveEmailList
позвонить.
Когда я смотрю на браузер конфигурации, все отображения действий настроены правильно, указывая на правильные вызовы методов.