我正在尝试弄清楚如何从 JavaScript 函数重定向回我的搜索结果:在给定搜索结果显示的 JSP 标题上,有一个“返回结果列表”链接,单击该链接即可返回到搜索结果。自从更改为
ModelAndView
控制器格式后,此“返回”链接似乎不再起作用,现在仅返回一个空白白页。我已经尝试修补底层控制器并通过其中的一些进行调试,但我不太确定为什么它是空白的。我想我在这里误解了一些东西,但我不确定是什么。
searchResultHeading.jsp 是其中包含包含相关链接的标头的 jsp
<%if(ApplicationBean.getBizActivityAuthorizations().ResultBasicInfo() && !ApplicationBean.isInExternalAppContext()) { %>
| <a href="javaScript:returnToResultList();" class=sm>Return to Result list</a>
<% } %>
</td>
</tr>
Header.jsp 是另一个 jsp,包含大量常见的内容和函数。
returnToResultList
功能就在里面
function returnToResultList()
{
<%if(ApplicationBean.isSearchResultsAvailable()){
%>
gotoSearchResults(document.userSelection);
<%
}else if(ApplicationBean.isMarketingListAvailable()){
%>
gotoListParticipants();
<%
}%>
}
function gotoSearchResults(searchForm)
{
searchForm.userAction.value = "<%=myLiterals.USER_ACTION_RETURN_TO_SEARCH_RESULTS_PAGE%>";
searchForm.action="/mySite/GlobalNavigationController";
searchForm.submit();
return true;
}
GlobalNavigationController.java 本身位于下面,我可以在其中重定向到显示其 JSP 的各种控制器。
@Controller
public class GlobalNavigationController {
@Autowired
private CustomerListController customerListController;
@RequestMapping(path="/GlobalNavigationController", method={RequestMethod.GET, RequestMethod.POST})
public ModelAndView doGet(HttpSession session, HttpServletRequest req, HttpServletResponse res) throws Exception
{
SiteBean myBean = new myBean();
try
{
RequestMapper.MapToBean(req,myBean);
if (myBean.getUserAction().equals(myLiterals.USER_ACTION_1))
{
return null;
}
else if(myBean.getUserAction().equals(myLiterals.USER_ACTION_2))
{
GlobalNavigationUCService.processSideNav();
GlobalNavigationUCService.resetDisPlayOrder();
return maintainController.doGet(session, req, res);
}
else if (myBean.getUserAction().equals(myLiterals.USER_ACTION_3))
{
GlobalNavigationUCService.processSideNavInitiateSearch();
GlobalNavigationUCService.resetDisPlayOrder();
return SearchController.doGet(session, req, res);
}
else if(myBean.getUserAction().equalsIgnoreCase(myLiteral.USER_ACTION_4))
{
GlobalNavigationUCService.processSideNavInitiateSearch();
GlobalNavigationUCService.processTabsGoToResults();
GlobalNavigationUCService.resetDisPlayOrder();
return ProfileController.doGet(session,req,res);
}
else if (myBean.getUserAction().equals(myLiterals.USER_ACTION_RETURN_TO_SEARCH_RESULTS_PAGE))
{
GlobalNavigationUCService.processTabsGoToResults();
return customerListController.doGet(session, req, res);
}
编辑:
查看 F12 网络详细信息后,我发现 GlobalNav 的有效负载没有传递由 JavaScript 定义的新 userAction。但我在函数中定义了新的 UserAction。也许我设置模型和视图结构的方式没有继续下去?
我弄清楚发生了什么:
当迁移到 Spring MVC 结构时,由于原始功能已被弃用,因此该 userAction 被认为已被弃用。结果是重定向返回 null。
为了解决我的问题,我刚刚实现了对
CustomerListController
的调用并引用了正确的 GlobalNavigationUCService
方法
@Controller
public class GlobalNavigationController {
@Autowired
private CustomerListController customerListController;
@RequestMapping(path="/GlobalNavigationController", method={RequestMethod.GET, RequestMethod.POST})
public ModelAndView doGet(HttpSession session, HttpServletRequest req, HttpServletResponse res) throws Exception
{
SiteBean myBean = new myBean();
try
{
RequestMapper.MapToBean(req,myBean);
if (myBean.getUserAction().equals(myLiterals.USER_ACTION_1))
{
return null;
}
else if(myBean.getUserAction().equals(myLiterals.USER_ACTION_REVIEW_MARKETING_LIST_PARTICIPANTS))
{
GlobalNavigationUCService.processTabsGoToSearch();
if(applicationServlet.getUserContext(req).getSearchResults() == null) {
GlobalNavigationUCService.resetCustomerDetailsInUserContext();
}
return customerListController.doGet(session, req, res);
}