Как включить фрагмент JSP в страницу JSP при пересылке из сервлета?

Во-первых, пожалуйста, предложите мне, если заголовок моего вопроса неверен.

Переходя к вопросу: скажем, у меня есть следующие компоненты:

search.jsp — JSP-страница с формой для отправки данных

Search.java – сервлет-контроллер, в котором get() и post() определены отдельно, чтобы он мог действовать как диспетчер для пути /search.jsp.

searchResults.jspf — Фрагмент с некоторым кодом JSTL для отображения Результатов поиска

Здесь я хочу, чтобы для каждого запроса POST сервлет контроллера выполнял свои вычисления, устанавливал результаты в качестве атрибутов запроса, а затем пересылал запрос в представление search.jsp, которое должно включать фрагмент после его собственные коды.

Итак, я могу определить представление таким образом, как:

search.jsp
+
searchResults.jspf

на одной странице.

Проблема в том, что я могу либо сделать Forward, либо Include с помощью диспетчера, поскольку я не знаю, как я могу Include фрагмент при пересылке в JSP.

Дайте мне знать, если мне нужно опубликовать код, если это необходимо, или нужны какие-либо исправления.


person Asif    schedule 04.11.2015    source источник


Ответы (2)


В свой search.jsp вставьте свой searchResult.jsp, используя jsp:include:

<jsp:include page="searchResult.jsp"></jsp:include>

Пример: 1. Сервлет:

@WebServlet(name = "Servlet", urlPatterns = "/myForwardTest")
public class Servlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getRequestDispatcher("search.jsp").forward(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          doPost(request, response);
    }
 }
  1. поиск.jsp:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
       <title>In search resust</title>
    </head>
    <body>
     Search.jsp embed searchResult.jsp
    <jsp:include page="searchResult.jsp" />
    </body>
    </html>
    
  2. searchResult.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <body>
      in searchResult
    </body>
    </html>
    
person fabien t    schedule 04.11.2015
comment
Как я могу убедиться, что он включается только при переходе из метода POST сервлета?? - person Asif; 04.11.2015
comment
ты пробовал это? Когда вы пересылаете запрос от контроллера, в настоящее время я не думаю, что есть разница между отправкой и получением... как вы пересылаете свой запрос? - person fabien t; 05.11.2015
comment
Я попробовал, никаких проблем. Хотите, чтобы у меня был пример? - person fabien t; 05.11.2015
comment
Спасибо, у меня есть обходной путь, я использовал JSTL c:if, который ищет requestAttribute скажем showResult, если приходит true, он будет include searchResults.jspf иначе ничего не произойдет, при пересылке запроса через GET я устанавливаю его как false в методе doGet() сервлета , тогда как я устанавливаю его как true в doPost()!! Я думаю, это правильный путь. . Ваше здоровье :) - person Asif; 09.11.2015

Вы можете включить свой jspf в свой jsp, как показано ниже:

<%@include file="searchResult.jspf" %>

вы можете настроить оператор на выполнение определенного раздела только в том случае, если конкретный тест оценивается как true .

Пример:

if(.....==true){
<%@include file="searchResult.jspf" %>
}else{
<%@include file="someOther.jspf" %>
}
person Madushan Perera    schedule 04.11.2015
comment
Я хотел бы использовать теги JSTL или EL, а не код JSP, если бы вы могли мне помочь, пожалуйста. . . - person Asif; 04.11.2015
comment
Вы можете узнать больше о JSTL и EL по этим ссылкам, приведенным ниже. Они привели примеры использования каждого тега в JSTL. JSTL--› tutorialspoint.com/jsp/jsp_standard_tag_library.htm EL--› tutorialspoint.com/jsp/jsp_expression_language.htm - person Madushan Perera; 06.11.2015