我有一个下面给出的操作方法-
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来命名映射到动作的方法,以免让开发人员感到困惑。