I am currently migrating a legacy system using Struts2/OGNL from JBoss 6.1 to JBoss 7.4 where an issue with object indexing with OGNL is occurring.
The following function is causing expression setting error in JBoss 7.4 which doesn't occur in the older version:
public Object getRowData(int index) {
while(index>=rows.size()){
try {
addRow(recordClass.newInstance(), false);
} catch (Exception e) {
logger.error("Error Grid getRowData",e);
e.printStackTrace();
}
}
return rows.get(index).getValue();
}
which when called by OGNL in JBoss 7 is throwing similar errors such as the one below:
[com.opensymphony.xwork2.ognl.OgnlValueStack] (default task-1) Error setting expression 'form.internalCodeGrid.rowData[7].createBy' with value '[Ljava.lang.String;@454e1cae': ognl.NoSuchPropertyException: com.cnt.tdc.tag.grid.Grid.rowData
where basically OGNL is failing to get the indexed element. This issue does not occur in JBoss 6.1.
I can replicate the exact same issue, down to the same issue log errors, in JBoss 6.1 by renaming/removing the getRowData() function.
Any help would be appreciated.
JARs and property files used:
- struts2-core-2.3.15.1
- ognl-3.0.6
- struts.xml (identical)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.ui.theme" value="simple" />
<constant name="struts.devMode" value="false" />
<constant name="struts.custom.i18n.resources" value="applicationResource,cnt" />
<constant name="struts.multipart.maxSize" value="50000000" />
<constant name="struts.action.excludePattern" value="/auth/*"/>
<package name="default" extends="struts-default">
<interceptors>
<interceptor name="loginInterceptor"
class="com.cnt.interceptor.LoginInterceptor" />
<interceptor name="accessRightInterceptor"
class="com.cnt.interceptor.AccessRightInterceptor" />
<interceptor name="requestParamtersInterceptor"
class="com.cnt.interceptor.RequestParametersInterceptor" />
<interceptor-stack name="mainStack">
<interceptor-ref name="loginInterceptor"/>
<interceptor-ref name="accessRightInterceptor"/>
<interceptor-ref name="requestParamtersInterceptor"/>
<interceptor-ref name="defaultStack">
<param name="validation.excludeMethods">
ssoLogin,execute,logout,input,back,cancel,create,edit,copy,newRegistration,copyPrevious,
retrieveWinsData,refreshWinsSubData,downloadTemplate,downloadUpdateTemplate,
downloadCodeTable,showDetail,importHandheld,
archive,viewReserveHistory,getSuggestSeq,viewSchemeDetail,adminDelete,viewImage,
popupSourceType,popupVisitorType,popupEbadgeStatus,popupMultipleProject,popupEuConsentStatus,popupEuConsentStatusSelect,popupSourceTypeSelect,
popupVisitorTypeSelect,popupMultipleProjectSelect,popupEbadgeStatusSelect,deleteRule,deleteRow,addNewRow,
popupSubProject,popupSubProjectSelect,popupHallNo,popupHallNoSelect,
popupProductSection, popupProductSectionSelect, popupBoothNo, popupBoothNoSelect,
popupCountry, popupCountrySelect, popupCountryType, popupCountryTypeSelect, popupCategoryCode, popupCategoryCodeSelect,
downloadAllocation,backScenario, redirectEditRule, reportDelete, getData,redirectEditScenario,
popupInternalCode,popupProvince,popupCity,popupInternalCodeSelect,popupProvinceSelect,popupCitySelect,
popupOffice,popupRegion,popupPostalZone,popupOfficeSelect,popupRegionSelect,popupPostalZoneSelect,
popupMarketType,popupMarketTypeSelect,popupProject,changePage,popupYear,popupYearSelect,
downloadCategoryCode, confirmImport, popupScannerID, popupScannerIDSelect,
popupScannerId, popupScannerIdSelect, popupScannerIdSearch, popupScannerIdReset,
viewVisitorTypeDetail,popupActionType,popupKioskNo,selectDefaultKiosk, deleteKiosk,
selectEvent, unselectEvent, searchEvent, popupNationality, popupNationalitySelect, verify,
exportBlacklistPassport,listBlacklistPassportReg,blacklistReg, deleteRegistrationCategory,
downloadStatusReport,downloadErrorLog,sortByColumn,
popupPhotoEditor,uploadPhoto,savePhoto,deletePhoto,addPhoto,downloadPhoto,refresh,
saveBlacklistRemarks,searchBlackListPassportRecords,searchHistoryRecords,addBlacklistHistory,exportBlacklistHistory,
popupDMDisclaimer,popupDMDisclaimerSelect,popupEbadgeStatus,popupEbadgeStatusSelect,popupPrintedBadge,popupPrintedBadgeSelect
</param>
<param name="workflow.excludeMethods">input,back,cancel</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="mainStack"/>
<global-results>
<result name="login" type="redirectAction">
<param name="namespace">/login</param>
<param name="actionName">login</param>
</result>
<result name="ssoLogin" type="redirectAction">
<param name="namespace">/login</param>
<param name="actionName">login!ssoLogin</param>
</result>
<result name="noAccessRight">/noPermission.jsp</result>
</global-results>
</package>
<include file="config/market-struts.xml"></include>
<include file="config/region-struts.xml"></include>
<include file="config/userRole-struts.xml"></include>
<include file="config/badge-struts.xml"></include>
<include file="report-struts.xml"></include>
<include file="portableVMS-struts.xml"></include>
<include file="monitoring-struts.xml"></include>
<package name="login" extends="default" namespace="/login">
<action name="login!*"
class="com.cnt.tdc.action.UserLoginAction"
method="{1}">
<result name="success" type="redirectAction">
<param name="namespace">/login</param>
<param name="actionName">sitemap!</param>
</result>
<result name="monitoring" type="redirectAction">
<param name="namespace">/onsiteSrv</param>
<param name="actionName">monitor!</param>
</result>
<result name="login_jsp" >/login.jsp</result>
<result name="logout_jsp" >/logout.jsp</result>
<result name="input" >/login.jsp</result>
</action>
<action name="sitemap!*"
class="com.cnt.tdc.action.SitemapAction"
method="{1}">
<result name="success">/sitemap.jsp</result>
<result name="input">/sitemap.jsp</result>
</action>
</package>
<package name="registration" extends="default" namespace="/registration">
<action name="maintain!*"
class="com.cnt.tdc.action.MaintainRegistrationAction"
method="{1}">
<result name="success">/maintainRegistration.jsp</result>
<result name="input" >/maintainRegistration.jsp</result>
<result name="redirect" type="redirectAction">
<param name="namespace">/registration</param>
<param name="actionName">enquire!</param>
<param name="form.back">true</param>
</result>
<result name="redirectEnquire" type="redirectAction">
<param name="namespace">/registration</param>
<param name="actionName">enquire!</param>
<param name="form.timeKey">${timeKey}</param>
</result>
<result name="popupPhotoEditor">/visitorPhotoEditor.jsp</result>
</action>
<!-- 44246 -->
<action name="enquire!*"
class="com.cnt.tdc.action.EnquireRegistrationAction"
method="{1}">
<result name="success">/enquireRegistration.jsp</result>
<result name="input" >/enquireRegistration.jsp</result>
<result name="editRecord" type="redirectAction">
<param name="namespace">/registration</param>
<param name="actionName">maintain!edit</param>
<param name="form.recordNo">${editRecord}</param>
</result>
<result name="popupSourceType">/selectSourceType.jsp</result>
<result name="popupVisitorType">/selectVisitorType.jsp</result>
<result name="popupCountryType">/selectCountryType.jsp</result>
<result name="popupCountry">/selectCountry.jsp</result>
<result name="popupMultipleProject">/selectMultipleProject.jsp</result>
<result name="popupInternalCode">/selectInternalCode.jsp</result>
<result name="popupAddressKeyword">/selectAddressKeyword.jsp</result>
<result name="popupEbadgeStatus">/selectEbadgeStatus.jsp</result>
<result name="popupEuConsentStatus">/selectEuConsentStatus.jsp</result>
</action>
<action name="import!*"
class="com.cnt.tdc.action.ImportRegistrationAction"
method="{1}">
<result name="success">/importRegistration.jsp</result>
<result name="input">/importRegistration.jsp</result>
</action>
<action name="importDates!*"
class="com.cnt.tdc.action.ImportDatesRegistrationAction"
method="{1}">
<result name="success">/importDatesRegistration.jsp</result>
<result name="input">/importDatesRegistration.jsp</result>
</action>
<action name="maintainNobMapping!*"
class="com.cnt.tdc.action.MaintainNobMappingAction"
method="{1}">
<result name="success">/maintainNobMapping.jsp</result>
<result name="input">/maintainNobMapping.jsp</result>
</action>
<action name="reserve!*"
class="com.cnt.tdc.action.ReserveRegistrationAction"
method="{1}">
<result name="success">/reserveRegistration.jsp</result>
<result name="input">/reserveRegistration.jsp</result>
<result name="viewHistory">/viewReserveHistory.jsp</result>
</action>
<action name="delete!*"
class="com.cnt.tdc.action.DeleteRegistrationAction"
method="{1}">
<result name="success">/deleteRegistration.jsp</result>
<result name="input">/deleteRegistration.jsp</result>
</action>
<action name="verify!*"
class="com.cnt.tdc.action.VerifyPassportAction"
method="{1}">
<result name="success">/verifyPassport.jsp</result>
<result name="input">/verifyPassport.jsp</result>
<result name="popupSourceType">/report/selectSourceType.jsp</result>
<result name="popupVisitorType">/report/selectVisitorType.jsp</result>
<result name="popupCountry">/report/selectCountry.jsp</result>
<result name="popupProvince">/report/selectProvinceSingleColumn.jsp</result>
<result name="popupCity">/report/selectCitySingleColumn.jsp</result>
<result name="popupInternalCode">/report/selectInternalCode.jsp</result>
<result name="popupNationality">/report/selectNationality.jsp</result>
</action>
</package>
<package name="department" extends="default" namespace="/department">
<action name="maintain!*"
class="com.cnt.tdc.action.MaintainDepartmentAction"
method="{1}">
<result name="success">/maintainDepartment.jsp</result>
<result name="input" >/maintainDepartment.jsp</result>
<result name="redirect" type="redirectAction">
<param name="namespace">/department</param>
<param name="actionName">enquire!</param>
<param name="form.back">true</param>
</result>
<result name="deleteSuccess" type="redirect">/department/enquire!</result>
<result name="redirectEnquire" type="redirectAction">
<param name="namespace">/department</param>
<param name="actionName">enquire</param>
<param name="form.timeKey">${timeKey}</param>
</result>
</action>
<action name="enquire!*"
class="com.cnt.tdc.action.EnquireDepartmentAction"
method="{1}">
<result name="success">/enquireDepartment.jsp</result>
<result name="input" >/enquireDepartment.jsp</result>
</action>
</package>
<package name="user" extends="default" namespace="/user">
<action name="maintain!*"
class="com.cnt.tdc.action.MaintainUserAction"
method="{1}">
<result name="success">/maintainUser.jsp</result>
<result name="input" >/maintainUser.jsp</result>
<result name="redirect" type="redirectAction">
<param name="namespace">/user</param>
<param name="actionName">enquire!</param>
<param name="form.back">true</param>
</result>
<result name="deleteSuccess" type="redirect">/user/enquire!</result>
<result name="redirectEnquire" type="redirectAction">
<param name="namespace">/user</param>
<param name="actionName">enquire!</param>
<param name="form.timeKey">${timeKey}</param>
</result>
</action>
<action name="enquire!*"
class="com.cnt.tdc.action.EnquireUserAction"
method="{1}">
<result name="success">/enquiryUser.jsp</result>
<result name="input" >/enquiryUser.jsp</result>
</action>
</package>
<package name="event" extends="default" namespace="/event">
<action name="maintainDetail!*"
class="com.cnt.tdc.action.MaintainEventDetailAction"
method="{1}">
<result name="success">/maintainEventDetail.jsp</result>
<result name="input">/maintainEventDetail.jsp</result>
<result name="redirect" type="redirectAction">
<param name="namespace">/event</param>
<param name="actionName">enquire!</param>
<param name="form.back">true</param>
</result>
<result name="redirectEnquire" type="redirectAction">
<param name="namespace">/event</param>
<param name="actionName">enquire!</param>
<param name="form.timeKey">${timeKey}</param>
</result>
<result name="crossEvent" type="redirect">/event/maintainCrossEvent</result>
<result name="kioskSetting" type="redirect">/event/maintainKioskSetting</result>
<result name="eventCategoryCode" type="redirect">/event/maintainCategory</result>
<result name="addOnQuestion" type="redirect">/event/maintainAddOnSummary</result>
</action>
<action name="maintainCrossEvent!*"
class="com.cnt.tdc.action.MaintainEventCrossEventAction"
method="{1}">
<result name="success">/maintainEventCrossEvent.jsp</result>
<result name="input">/maintainEventCrossEvent.jsp</result>
<result name="redirect" type="redirectAction">
<param name="namespace">/event</param>
<param name="actionName">enquire!</param>
<param name="form.back">true</param>
</result>
<result name="redirectEnquire" type="redirectAction">
<param name="namespace">/event</param>
<param name="actionName">enquire!</param>
<param name="form.timeKey">${timeKey}</param>
</result>
<result name="details" type="redirect">/event/maintainDetail!edit</result>
<result name="kioskSetting" type="redirect">/event/maintainKioskSetting</result>
<result name="eventCategoryCode" type="redirect">/event/maintainCategory</result>
<result name="addOnQuestion" type="redirect">/event/maintainAddOnSummary</result>
</action>
<action name="maintainKioskSetting!*"
class="com.cnt.tdc.action.MaintainEventKioskSettingAction"
method="{1}">
<result name="success">/maintainEventKioskSetting.jsp</result>
<result name="input">/maintainEventKioskSetting.jsp</result>
<result name="redirect" type="redirectAction">
<param name="namespace">/event</param>
<param name="actionName">enquire!</param>
<param name="form.back">true</param>
</result>
<result name="redirectEnquire" type="redirectAction">
<param name="namespace">/event</param>
<param name="actionName">enquire!</param>
<param name="form.timeKey">${timeKey}</param>
</result>
<result name="details" type="redirect">/event/maintainDetail!edit</result>
<result name="crossEvent" type="redirect">/event/maintainCrossEvent</result>
<result name="eventCategoryCode" type="redirect">/event/maintainCategory</result>
<result name="addOnQuestion" type="redirect">/event/maintainAddOnSummary</result>
</action>
<action name="maintainCategory!*"
class="com.cnt.tdc.action.MaintainEventCategoryAction"
method="{1}">
<result name="success">/maintainEventCategory.jsp</result>
<result name="input">/maintainEventCategory.jsp</result>
<result name="redirectEnquire" type="redirectAction">
<param name="namespace">/event</param>
<param name="actionName">enquire!</param>
<param name="form.timeKey">${timeKey}</param>
</result>
<result name="details" type="redirect">/event/maintainDetail!edit</result>
<result name="kioskSetting" type="redirect">/event/maintainKioskSetting</result>
<result name="crossEvent" type="redirect">/event/maintainCrossEvent</result>
<result name="addOnQuestion" type="redirect">/event/maintainAddOnSummary</result>
</action>
<action name="enquire!*"
class="com.cnt.tdc.action.EnquireEventAction"
method="{1}">
<result name="success">/enquireEvent.jsp</result>
<result name="input">/enquireEvent.jsp</result>
</action>
<!-- Phase 2 -->
<action name="maintainAddOnSummary!*"
class="com.cnt.tdc.action.MaintainEventAddOnSummaryAction"
method="{1}">
<result name="success">/maintainEventAddOnSummary.jsp</result>
<result name="input">/maintainEventAddOnSummary.jsp</result>
<result name="redirect" type="redirectAction">
<param name="namespace">/event</param>
<param name="actionName">enquire!</param>
<param name="form.back">true</param>
</result>
<result name="redirectEnquire" type="redirectAction">
<param name="namespace">/event</param>
<param name="actionName">enquire!</param>
<param name="form.timeKey">${timeKey}</param>
</result>
<result name="previewForm" >/previewForm.jsp</result>
<result name="previewTerms" >/previewTerms.jsp</result>
<result name="previewFair">/previewFair.jsp</result>
<result name="previewEvent">/previewEvent.jsp</result>
<result name="details" type="redirect">/event/maintainDetail!edit</result>
<result name="kioskSetting" type="redirect">/event/maintainKioskSetting</result>
<result name="eventCategoryCode" type="redirect">/event/maintainCategory</result>
<result name="crossEvent" type="redirect">/event/maintainCrossEvent</result>
</action>
<action name="maintainAddOnDetail!*"
class="com.cnt.tdc.action.MaintainEventAddOnDetailAction"
method="{1}">
<result name="success">/maintainEventAddOnDetail.jsp</result>
<result name="input">/maintainEventAddOnDetail.jsp</result>
<result name="redirect" type="redirect">/event/maintainAddOnSummary</result>
<result name="summary" type="redirect">/event/maintainAddOnSummary</result>
<result name="details" type="redirect">/event/maintainDetail!edit</result>
<result name="kioskSetting" type="redirect">/event/maintainKioskSetting</result>
<result name="eventCategoryCode" type="redirect">/event/maintainCategory</result>
<result name="crossEvent" type="redirect">/event/maintainCrossEvent</result>
</action>
</package>
<package name="exhibitor" extends="default" namespace="/exhibitor">
<action name="maintain!*"
class="com.cnt.tdc.action.MaintainExhibitorAction"
method="{1}">
<result name="success">/maintainExhibitor.jsp</result>
<result name="input" >/maintainExhibitor.jsp</result>
<result name="redirect" type="redirectAction">
<param name="namespace">/exhibitor</param>
<param name="actionName">enquire!</param>
<param name="form.back">true</param>
<param name="form.message">${message}</param>
</result>
<result name="popUp">/viewImage.jsp</result>
<result name="redirectEnquire" type="redirectAction">
<param name="namespace">/exhibitor</param>
<param name="actionName">enquire!</param>
<param name="form.timeKey">${timeKey}</param>
</result>
<result name="popupPhotoEditor">/visitorPhotoEditor.jsp</result>
</action>
<action name="enquire!*"
class="com.cnt.tdc.action.EnquireExhibitorAction"
method="{1}">
<result name="success">/enquireExhibitor.jsp</result>
<result name="input" >//enquireExhibitor.jsp</result>
<result name="editRecord" type="redirectAction">
<param name="namespace">/exhibitor</param>
<param name="actionName">maintain!edit</param>
<param name="form.recordNo">${editRecord}</param>
</result>
<result name="popupEbadgeStatus">/selectEbadgeStatus.jsp</result>
<result name="popupSourceType">/selectSourceType.jsp</result>
<result name="popupVisitorType">/selectVisitorType.jsp</result>
</action>
<action name="import!*"
class="com.cnt.tdc.action.ImportExhibitorAction"
method="{1}">
<result name="success">/importExhibitor.jsp</result>
<result name="input">/importExhibitor.jsp</result>
<result name="viewDetail">/viewSchemeDetail.jsp</result>
</action>
</package>
<package name="image" namespace="/image" extends="default">
<result-types>
<result-type name="imageResult"
class="com.cnt.tdc.CustomImageByteResult" />
</result-types>
<action name="ImageAction!*" class="com.cnt.tdc.action.ImageAction">
<result name="success" type="imageResult">
</result>
<result name="fail">
</result>
</action>
</package>
<package name="handheld" extends="default" namespace="/handheld">
<action name="import!*"
class="com.cnt.tdc.action.ImportHandheldAction"
method="{1}">
<result name="success">/importHandheld.jsp</result>
<result name="input" >/importHandheld.jsp</result>
<result name="redirect" type="redirect">/handheld/enquire</result>
</action>
<action name="enquire!*"
class="com.cnt.tdc.action.EnquireHandheldAction"
method="{1}">
<result name="success">/enquireHandheld.jsp</result>
<result name="input" >/enquireHandheld.jsp</result>
</action>
</package>
<package name="project" extends="default" namespace="/project">
<action name="maintain!*"
class="com.cnt.tdc.action.MaintainProjectAction"
method="{1}">
<result name="success">/maintainProject.jsp</result>
<result name="input">/maintainProject.jsp</result>
</action>
</package>
<package name="source" extends="default" namespace="/source">
<action name="maintain!*"
class="com.cnt.tdc.action.MaintainSourceTypeAction"
method="{1}">
<result name="success">/maintainSourceType.jsp</result>
<result name="input">/maintainSourceType.jsp</result>
</action>
</package>
<package name="visitor" extends="default" namespace="/visitor">
<action name="maintain!*"
class="com.cnt.tdc.action.MaintainVisitorTypeAction"
method="{1}">
<result name="success">/maintainVisitorType.jsp</result>
<result name="input">/maintainVisitorType.jsp</result>
</action>
</package>
<package name="internal" extends="default" namespace="/internal">
<action name="maintain!*"
class="com.cnt.tdc.action.MaintainInternalCodeAction"
method="{1}">
<result name="success">/maintainInternalCode.jsp</result>
<result name="input">/maintainInternalCode.jsp</result>
</action>
</package>
<package name="defaultConsentMessage" extends="default" namespace="/defaultConsentMessage">
<action name="maintain!*"
class="com.cnt.tdc.action.MaintainDefaultConsentMessageAction"
method="{1}">
<result name="success">/maintainDefaultConsentMessage.jsp</result>
<result name="input">/maintainDefaultConsentMessageInput.jsp</result>
<result name="new" >/maintainDefaultConsentMessageInput.jsp</result>
<result name="edit" >/maintainDefaultConsentMessageInput.jsp</result>
<result name="deleteSuccess" type="redirect">/defaultConsentMessage/maintain!</result>
<result name="redirect" type="redirectAction">
<param name="namespace">/defaultConsentMessage</param>
<param name="actionName">maintain!</param>
<param name="form.back">true</param>
</result>
</action>
</package>
<package name="location" extends="default" namespace="/location">
<action name="maintain!*"
class="com.cnt.tdc.action.MaintainLocationAction"
method="{1}">
<result name="success">/maintainLocation.jsp</result>
<result name="input">/maintainLocation.jsp</result>
</action>
</package>
<package name="sysParam" extends="default" namespace="/sysParam">
<action name="maintain!*"
class="com.cnt.tdc.action.MaintainSysParameterAction"
method="{1}">
<result name="success">/maintainSysParameter.jsp</result>
<result name="input">/maintainSysParameter.jsp</result>
</action>
</package>
<package name="vrs" extends="default" namespace="/vrs">
<action name="export!*"
class="com.cnt.tdc.action.ExportVrsDataAction"
method="{1}">
<result name="success">/exportVrsData.jsp</result>
<result name="input">/exportVrsData.jsp</result>
</action>
</package>
<package name="inbox" extends="default" namespace="/inbox">
<action name="enquire!*"
class="com.cnt.tdc.action.InboxAction"
method="{1}">
<result name="success">/inbox.jsp</result>
<result name="input">/inbox.jsp</result>
</action>
</package>
<package name="other" extends="default" namespace="/*">
<action name="*">
<result>/index.jsp</result>
</action>
</package>
<package name="activityLog" extends="default" namespace="/activityLog">
<action name="enquire!*"
class="com.cnt.tdc.action.EnquireActivityLogAction"
method="{1}">
<result name="success">/enquireActivityLog.jsp</result>
<result name="input">/enquireActivityLog.jsp</result>
<result name="popupActionType">/selectActivityActionType.jsp</result>
</action>
</package>
<package name="RandomReferenceNoReportAction" extends="default" namespace="/randomReferenceNo">
<action name="generate!*"
class="com.cnt.tdc.action.report.RandomReferenceNoReportAction"
method="{1}">
<result name="success">/randomReferenceNoReport.jsp</result>
<result name="input">/randomReferenceNoReport.jsp</result>
<result name="popupKioskNo">/monitoring/selectKioskIdWithLocation.jsp</result>
</action>
</package>
<package name="passport" extends="default" namespace="/passport">
<action name="import!*"
class="com.cnt.tdc.action.ImportBlacklistPassportAction"
method="{1}">
<result name="success">/importBlacklistPassport.jsp</result>
<result name="input">/importBlacklistPassport.jsp</result>
</action>
<action name="enquire!*"
class="com.cnt.tdc.action.EnquireBlacklistPassportAction"
method="{1}">
<result name="success">/enquireBlacklistPassport.jsp</result>
<result name="input">/enquireBlacklistPassport.jsp</result>
<result name="popupNationality">/selectNationalitySearch.jsp</result>
</action>
<action name="delete!*"
class="com.cnt.tdc.action.DeleteBlacklistPassportAction"
method="{1}">
<result name="success">/deleteBlacklistPassport.jsp</result>
<result name="input">/deleteBlacklistPassport.jsp</result>
</action>
</package>
</struts>