json - 如果结果类型为 json,则 Struts2 Action 被调用两次

标签 json struts2 struts2-config-browser

我有一个包含 4 个操作方法的 Action 类。 所有四个操作操作方法都使用 json 结果。

通过日志记录和调试,我已经验证如果我调用操作方法1,操作方法2和3也会被调用。但不是4。最后再次调用action方法1,生成json结果

如果我将 Action 方法 1 的结果类型更改为具有 jsp 位置的默认调度程序,则仅调用 Action 方法 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,然后再次调用ajaxGetGoLiveEmailListajaxToggleGroupBusinessSubscribed 被跳过。

如果我将ajaxGetGoLiveEmailList的结果注释更改为

results={@Result(location="something.jsp")

,仅调用 ajaxGetGoLiveEmailList

当我查看配置浏览器时,所有操作映射都已正确配置,指向正确的方法调用。

最佳答案

JSON 插件可能会调用所有以“get”开头的方法,以尝试序列化它们以进行输出。尝试将您的方法重命名为其他名称。

关于json - 如果结果类型为 json,则 Struts2 Action 被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6061709/

相关文章:

java - 没有为操作 <class> 和结果输入定义结果

java - 无法获取 struts.xml 以连接到 struts-2.0.dtd

struts2 - web.xml中的java.lang.ClassNotFoundException : org. apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

json - 如果结果类型为json,Struts2操作将被调用两次

ios - 数组iOS的Json序列化

java - java解析Json文件

java - 如何显示所有可用的 Struts2 Action ?

java - 如果我更改 struts.xml 路径,struts2-convention 和 struts2-config-browser-plugin 将无法工作

javascript - Angular ng-options 不是由模型设置的

java - Struts2 Web 应用程序中的 HTTP 状态 404