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