2012-02-02 4 views
132

В настоящее время я пытаюсь изучить JSP. Мой вопрос, в настоящее время я использовал, чтобы включить верхние и нижние колонтитулы страницы с помощью:Включите еще один JSP-файл

<%@include file="includes/header.jsp" %> 

и

<%@include file="includes/footer.jsp" %> 

Но теперь, я отделил содержание страницы также. Таким образом, если пользователь нажимает на страницу, скажем, на продукты, он должен загрузить JSP-файл, который находится в: includes/pages/products.jsp Таким образом, ссылка на пользователя: <a href="index.jsp?p=products">Products</a>.

Итак, мне нужно получить значение p и отобразить страницу на ее основе.

Ниже приводится то, что я сделал до сих пор.

<% 
if(request.getParameter("p")!=null) 
{ 
    String p = request.getParameter("p"); 
%>  

<%@include file="includes/page_name.jsp" %> 

<% 
} 
%> 

Итак, как разместить значение переменной «p» в позиции «page_name»?

Или, есть ли какой-либо другой метод, который я мог бы использовать?

В PHP мы могли бы использовать include() или include_once(). Я немного застрял в этом JSP. :(

+1

Почему бы не жестко обозначить там pagename? в любом случае вы проверяете P, тогда вы знаете, что страница для разнесения будет p.jsp, поэтому любая причина усложнить? – kosa

+0

Спасибо, что ответили. Это было для примера. Фактически, я разделил страницу на несколько. Например, если у меня есть страница «Продукты» в области администратора, для добавления нового продукта, редактирования продукта, поиска продукта, просмотра продукта и т. Д., Он разделяется на вспомогательные страницы. Итак, жесткая кодировка каждой строки выглядела бы противно. Скажем, чтобы отображать мое имя всего 10 раз, я мог либо выбрать печать с использованием цикла, либо записать 10 строк. Но я думаю, что лучше выбрать петлю. Не так ли? Я думаю, это может быть решение: http://stackoverflow.com/questions/482788/how-to-include-a-runtime-file-for-include-in-jsp –

ответ

194

Что вы делаете это статический включить. Статическое включение разрешается во время компиляции и, таким образом, не может использовать значение параметра, которое известно только во время выполнения.

Что вам нужно, это динамическое включает:

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

Обратите внимание, что вы должны использовать JSP EL, а не скриптлеты. Также кажется, что вы используете центральный контроллер с index.jsp. Вы должны использовать сервлет, чтобы сделать это вместо этого, и отправить соответствующий JSP из этого сервлета. Или лучше, используйте существующую инфраструктуру MVC, например Stripes или Spring MVC.

+1

Спасибо за ваши предложения. :) Я пробовал использовать тег jsp: include. Но во время выполнения он дает ошибку файла, не найденную. Сведения об исключении: 'java.io.FileNotFoundException:/includes/<% = p% > .jsp'. Похож, что '<%= p %>' используется так же, как в пути к файлу! –

+7

Не используйте скриптлеты. Используйте JSP EL: page = "/ includes/$ {param.p}". Или попробуйте со страницей = "<% ="/includes/"+ p%>". –

+3

Спасибо. Я использовал его следующим образом: ' "/>' и теперь он работает :) –

4

<a href="index.jsp?p=products">Products</a> 1. когда пользователь нажимает на ссылку продуктов, вы можете напрямую позвонить products.jsp.

Я имею в виду и может сохранить имя файла JSP же как параметр Value.

<% 
if(request.getParameter("p")!=null) 
{ 
    String contextPath="includes/"; 
    String p = request.getParameter("p"); 
    p=p+".jsp"; 
    p=contextPath+p; 

%>  

<%@include file="<%=p%>" %> 

<% 
} 
%> 

или

2.you может поддерживать внешний файл ресурсов с ключом, пары значений. , как показано ниже

products : products.jsp

customer : customers.jsp

вы можете получить программно имя JSP-файла из файла Недвижимость Болгария Недвижимость.

таким образом, вы можете легко изменить имя файла JSP

+0

Спасибо. В настоящий момент я использую первое. На самом деле, у меня проблема с тем, как это сделать! –

+0

Я отредактировал ответ –

+0

'org.apache.jasper.JasperException: /admin.jsp(239,44) PWC6117: Файл"/<%=p%> "не найден". Это сработало на вашей стороне? –

13

Вы можете использовать Включить директивы

<% 
if(request.getParameter("p")!=null) 
{ 
    String p = request.getParameter("p"); 
%>  

<%@include file="<%="includes/" + p +".jsp"%>"%> 

<% 
} 
%> 

или JSP Включить Action

<% 
if(request.getParameter("p")!=null) 
{ 
    String p = request.getParameter("p"); 
%>  

<jsp:include page="<%="includes/"+p+".jsp"%>"/> 

<% 
} 
%> 

различные является включать директиву включает в себя файл на этапе трансляции. , в то время как JSP Include Action включает файл при запросе страницы

Я рекомендую Spring MVC Framework в качестве вашего контроллера для управления вещами. использовать шаблон url вместо параметра.

пример:

www.yourwebsite.com/products 

вместо

www.yourwebsite.com/?p=products 

Смотреть это видео Spring MVC Framework

+1

видео защищено ..показать его публике – AutoMEta

+0

Можете ли вы проверить, действительно ли работает ваш первый пример? Кажется, я не могу заставить его работать. – Jus12

5

Во время страницы перевода, содержание файла, указанного в директиве включить в 'вставить', как это то место, где используется директива JSP include. Затем исходная страница JSP преобразуется в класс сервлета Java. Входящий файл может быть статическим ресурсом или страницей JSP. Как правило, директива JSP include используется для включения заголовков баннеров и нижних колонтитулов.

Синтаксис включать JSP файл:

<%@ include file="relative url"> 

Пример

<%@include file="page_name.jsp" %> 
13

Вы можете использовать параметры, как этот

<jsp:include page='about.jsp'> 
    <jsp:param name="articleId" value=""/> 
</jsp:include> 

и

в about.jsp вы можете взять er

<%String leftAds = request.getParameter("articleId");%> 
Смежные вопросы