у меня есть класс действия с 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 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 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 theUserList = new SecurityService().getAll();
List theEmailList = new ArrayList();
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 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 theUnusedEntityBusinessList) {
this.theUnusedEntityBusinessList = theUnusedEntityBusinessList;
}
public List 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 theEmailList) {
this.theEmailList = theEmailList;
}
public List getTheEmailList() {
return theEmailList;
}
}
В этом классе действий я пытаюсь вызвать ajaxGetGoLiveEmailList
, и получаю сначала вызывается ajaxGetGoLiveEmailList
, а затем ajaxGetChaserEmail1438 [1114, затем 1114]. ajaxGetAvailableEntityList
, а затем снова вызывается ajaxGetGoLiveEmailList
. ajaxToggleGroupBusinessSubmitted
пропущен.
Если я изменю аннотацию результата ajaxGetGoLiveEmailList
на
results={@Result(location="something.jsp")
, будет вызываться только ajaxGetGoLiveEmailList
.
Когда я смотрю в браузер конфигурации, все сопоставления действий настраиваются правильно, указывая на правильные вызовы методов.