简体   繁体   中英

OGNL Indexing issue after migration to JBoss 7

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>

Alright, managed to fix it by adding the function below in the same class.

public Object[] getRowData() { return new Object[0]; }

I'm assuming that this fixes the problem because JBoss 7.1 handles JavaBeans than 6.4 and required more stringent pattern compliance.

Check this thread out for more info. OGNL Array and List Indexing

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM