通过ajax调用调用操作方法的行为是出乎意料的



我有一个下面给出的操作方法-

public String getCommissionaryOfficeByCustomLocation() {
    Connection conn = null;
    try {
        ApplicantDbMethods db = new ApplicantDbMethods();
        conn = db.getConnection();
        commissionaryOffice = db.getCommissionaryOffice(conn, selectedCustomLocation);
        return SUCCESS;
    } catch (Exception ex) {
        return ERROR;
    } finally {
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException ex) {
                Logger.getLogger(ApplicantRegistrationDetails.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}

我通过Ajax对下拉框的onChange事件调用此方法。在通过Ajax调用这个动作之后,当我在调试模式下运行应用程序时,我看到在执行动作方法之后,这个动作方法被再次调用,在此之后,另一个动作方法被自动调用。另一个方法是-

public String getContactPersonForFutureCommunications() {
    Connection conn = null;
    try {
        session = ActionContext.getContext().getSession();
        if (session == null) {
            return ERROR;
        }
        String applicantId = session.get("ApplicantId").toString();
        if (applicantId == null) {
            return ERROR;
        }
        ApplicantDbMethods db = new ApplicantDbMethods();
        conn = db.getConnection();
        // db.insertFutureContactPerson(conn,applicantId,futureContact);
        if ("Other".equals(futureContact)) {
            return "OTHER";
        }
        return SUCCESS;
    } catch (Exception ex) {
        return ERROR;
    } finally {
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException ex) {
                Logger.getLogger(ApplicantRegistrationDetails.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}

两个动作方法都在同一个动作类中。jQuery方法只调用一次onChange事件。jQuery的方法是-

function getCommissionaryOffice(customLocation) {
    var location = $('#' + customLocation).val();
    $.ajax(
            {
                type: 'POST',
                url: 'getCommissionaryOffice',
                data: {selectedCustomLocation: location},
                //async: false ,
                success: function(data) {
                    var commissionaryOffice=data.commissionaryOffice;
                    $('#commissionaryOffice').val(commissionaryOffice);
                },
                error:function(data){
                    alert("error getting commissionay office!");
                }
            });
}

我不知道为什么会这样,请帮忙。
struts.xml表项如下-

<package name="default" extends="json-default">
    <result-types>
        <result-type name="tiles"
                     class="org.apache.struts2.views.tiles.TilesResult" />
    </result-types>
    <action name="getCommissionaryOffice" class="applicant.ApplicantRegistrationDetails" method="getCommissionaryOfficeByCustomLocation">
        <result name="success" type="json"/>
    </action>
    <action name="FutureContactPerson" class="applicant.ApplicantRegistrationDetails" method="getContactPersonForFutureCommunications">
         <result name="input" type="tiles">FutureContactDetails</result>
        <result name="success" type="tiles">SuccessfullySubmitted</result>
    </action>
 </package> 

动作类中所有具有get前缀的方法都符合JavaBeans约定,可以用作动作bean的属性。这也称为getter

操作配置对于将操作映射到具有此名称的方法没有任何限制。当操作被调用时,方法被执行,而您错误地认为该操作被调用了两次。

可以调用

方法作为动作类中的getter来访问该属性。它可以是OGNL、JSON或使用BeanInfo访问属性和调用getter方法的任何其他代码。最好不要用getter来命名映射到动作的方法,以免让开发人员感到困惑。

最新更新