Hi, I use Displaytag and want to use the sorting capability. So I configured the displaytag to go to a empty action, because my list is in the session - nothing should be loaded again, just using the existing search results.
<display:table uid="row" name="searchResults" pagesize="15" sort="list" requestURI="/showResultList.action" cellspacing="0" cellpadding="0"> <display:column property="ipNbr" title="" decorator=" de.seb.bpc.search.presentation.decorators.RadioButtonColumnDecorator"/> .... </display:table> If I do this, I get a 404 error that the ressource which is defined in my struts.xml could not be found. I debugged the execution of the action and struts goes into the action and returns the "success" string" and I get the error. If I put just an empty string into requestURI of the displaytag the action which performs the search and returns the searchresults by putting a collection into the session returns to the jsp without the ressource not found error. But I looked into the empty action and my searchresults were still in the session. The empty action in the struts.xml <action name="showResultList" class=" de.bpc.search.presentation.SearchAction" method="showResultList"> <result name="success">/involved_party_search.jsp</result> </action> And the working action: <action name="internalSearch" class=" de.bpc.search.presentation.SearchAction" method="internalSearch"> <result name="success">/WEB-INF/jsp/searchInvolvedParty.jsp</result> <result name="error">/WEB-INF/jsp/error.jsp</result> <result name="errorValidation">/WEB-INF/jsp/searchInvolvedParty.jsp</result> <result name="showParamHelp">/WEB-INF/jsp/showParamHelp.jsp</result> </action> And the java code: package de.seb.bpc.search.presentation; ..... public class SearchAction extends SearchSupport { public String internalSearch() throws Exception { log.debug("internalSearch.... "); /*if (getUserId() == null) return "errorUserId";*/ ArrayList<String> errorList = InputParamValidator.validate (getInputParameters()); if (errorList.size() > 0) { for (int i=0 ; i < errorList.size(); i++) { log.error(getText(errorList.get(i))); addActionError(getText(errorList.get(i))); } return "showParamHelp"; } clearSimpleSearchDefaultValue(getSearchCriteria()); setSelectedIpFromGlobalContext(); clearSeachResults(); getSearchCriteria().trim(); log.debug("internalSearch: \n" + getSearchCriteria().toString()); log.debug("searchTypeString: " + getSearchTypeString()); // validate the given searchCriteria, the searchType is returned // the validation resets the searchCriteria of all not selected tabs !!! SearchType searchType = SearchType.valueOf(this.getSearchTypeString ()); searchType = SearchCriteriaValidator.validateSearchCriteria (getSearchCriteria(),searchType); log.debug("searchType after validation: " + searchType); // add actionErrors if searchCriteria not valid if (SearchCriteriaValidator.getErrorList().size() > 0) { log.error("validation of searchCriteria not successful"); //setActionErrors(SearchCriteriaValidator.getErrorList()); for (int i=0 ; i < SearchCriteriaValidator.getErrorList().size(); i++) { log.error(getText(SearchCriteriaValidator.getErrorList ().get(i))); addActionError(getText(SearchCriteriaValidator.getErrorList ().get(i))); } return "errorValidation"; } // perform search try { SearchResults results = SearchDispatcher.performSearch(searchType, getUserId(), getSearchCriteria()); if (!results.hasErrorMessages()) { setSearchResults (results.getInvolvedParties()); if (results.isMoreDataAvaible()) { addActionMessage(getText("info.search.more.data")); } } else { Iterator<String> it = (Iterator<String>)results.getErrorMessages().iterator(); while (it.hasNext()) addActionError(it.next()); } } catch (ServiceAdapterException saex) { addActionError(getText("error.search.intern.severe")+" : "+saex.getMessage()+" | Returncode: "+saex.getReturnCode()); } catch (Exception ex) { if (searchType.equals(Constants.SearchType.SEARCH_BY_NAME) && ( ex.getMessage().indexOf("TIMEOUT: no messages received") != -1)) { String[] args = {PropertyUtil.getInitParameter(" searchByName.timeout")}; addActionError(getText("error.search.timeout", args)); } else throw ex; } // if nothing found set action message if(getSearchResults() == null) { addActionMessage(getText("info.search.not.found")); } return "success"; } public String showResultList() { log.debug("showResultList"); return "success"; } } At the end for forwarding to the right jsp just the return string should matter - or am I wrong? I have no glue what is wrong :-( Best Regards, Marc