Перенаправление на страницу через Header.jsp

Я пытаюсь выяснить, как перенаправить обратно к результатам поиска из функции JavaScript: в заголовке JSP, который отображается для данного результата поиска, есть ссылка «Вернуться к списку результатов», по которой можно щелкнуть, чтобы вернуться к результаты поиска. После перехода на формат контроллера ModelAndView кажется, что эта ссылка возврата больше не работает и теперь просто возвращает пустую белую страницу. Я пробовал возиться с базовыми контроллерами и отлаживать некоторые из них, но не совсем понимаю, почему он пуст. Мне кажется, я здесь что-то не понимаю, но не знаю, что именно.

searchResultHeading.jsp — это jsp, внутри которого есть заголовок, содержащий рассматриваемую ссылку.

        <%if (ApplicationBean.getBizActivityAuthorizations().ResultBasicInfo() && !ApplicationBean.isInExternalAppContext()) { %>
            &nbsp;| <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 в функции. Возможно, что-то не сохраняется из того, как я настроил структуру модели и представления?

Ваш код может вызывать исключения. Поймайте это и добавьте трассировку стека к вопросу.

Roman C 02.07.2024 18:16

@RomanC В настоящее время в консоли нет ничего об исключениях. Я могу попробовать добавить Try-Catch к функции JavaScript и посмотреть, возвращает ли она исключение, а не сообщает о нем.

Rob 02.07.2024 18:55

Я отладил его с помощью некоторых Try-Catches в функциях Javascript и не обнаружил никаких ошибок. Я думаю, что, как и отредактировал вышеизложенное, UserAction в форме не передается должным образом, и перенаправление ни к чему не приводит.

Rob 02.07.2024 20:03

Вы отлаживали белую пустую страницу? Ошибка опубликована там.

Roman C 02.07.2024 20:33

У меня есть try-catch в GlobalNavController и контроллере SearchList, на который GlobalNav должен перенаправляться. Я поместил Try-Catches в функцию Javascript для вывода ошибок на консоль. Я не видел никаких исключений на вкладке сети моего браузера или в консоли моей IDE ни разу, когда я повторно запускал код и тестировал страницу. Единственное, что выглядело не так, это то, что в GlobalNavServlet на вкладке сети userAction не соответствует литералу, на который ссылается функция javascript. литерал, присваиваемый userAction, должен быть: 'returnToSearchResultsPage'

Rob 02.07.2024 20:50

Эти литералы недоступны в вашем коде.

Roman C 02.07.2024 21:05

В верхней части Header.jsp мы импортируем файл литералов: <%@ page import = "com.webpage.literals.myLiterals" %> Кажется, это работало до изменений в структуре ModelAndView-Controller.

Rob 02.07.2024 21:17

Никто этого не знает, подумайте о том, чтобы создать минимально воспроизводимый пример.

Roman C 02.07.2024 21:34
0
8
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я понял, что происходит:

Когда был выполнен переход на структуру Spring MVC, это пользовательское действие считалось устаревшим, поскольку исходная функциональность устарела. В результате значение Redirect возвращалось нулевым. Флаг, на который ссылался JSP при вызове функции, всегда установлен для всего сайта как True.

В результате мы не использовали функцию Javascript внутри условия if, показанного выше, а вместо этого использовали эту функцию внутри else:

function gotoListParticipants()
{
    userSelection.userAction.value = "<%=myLiterals.USER_ACTION_REVIEW_MARKETING_LIST_PARTICIPANTS%>";
    userSelection.action= "/mySite/GlobalNavigationServlet";
    userSelection.submit();
    return true;        
}

Чтобы исправить это, я реализовал вызов CustomerListController, если для userAction установлено значение USER_ACTION_REVIEW_MARKETING_LIST_PARTICIPANTS.

@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);
            }

Другие вопросы по теме