Додайте ще один JSP-файл


161

Зараз я намагаюся вивчити JSP. Моє запитання полягає в тому, що в даний час я включав заголовок і колонтитул сторінки за допомогою:

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

і

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

Але тепер я також розділив вміст сторінки. Таким чином, якщо користувач натискає на сторінці, скажімо , продукти, він повинен завантажити файл JSP , який розташований в: includes/pages/products.jsp Отже, посилання на користувача, як: <a href="index.jsp?p=products">Products</a>.

Отже, я повинен отримати значення р і відобразити на його основі сторінку.

Далі - те, що я зробив досі.

<%
 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
Чому б там не ввести жорсткий код назви сторінки? у будь-якому випадку ви перевіряєте на P, тоді ви знаєте, що сторінка диспозиції буде p.jsp, тому будь-яка причина ускладнюватися?
коса

Дякуємо за відповідь. Це було для прикладу. Насправді я розділив сторінку на кілька. Наприклад, якщо у мене на сторінці адміністратора є сторінка "Продукти", щоб додати новий продукт, відредагувати продукт, здійснити пошук продукту, переглянути продукт тощо. Він розділяється на підсторінки. Отже, жорстке кодування кожного рядка виглядало б противно. Скажімо, щоб відобразити моє ім’я лише 10 разів, я міг вибрати друк за допомогою циклу або записати 10 рядків. Але я думаю, вибрати цикл краще. Чи не так? Я думаю, це може бути рішення: stackoverflow.com/questions/482788/…
Akhilesh B Chandran

Відповіді:


231

Те, що ви робите, - це статичне включення. Статичне включення вирішується під час компіляції, тому може не використовувати значення параметра, яке відомо лише під час виконання.

Те, що вам потрібно, це динамічний:

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

Зауважте, що вам слід використовувати JSP EL, а не скрипти. Також здається, що ви реалізуєте центральний контролер з index.jsp. Ви повинні використовувати сервлет, щоб зробити це замість цього, і відправити у відповідний JSP з цього сервлета. Або ще краще, використовуйте існуючий каркас MVC типу Stripes або Spring MVC.


1
Дякуємо за ваші пропозиції. :) Я спробував використовувати jsp: include tag. Але під час виконання він дає файл, який не знайшов помилку. Відомості про виключення: java.io.FileNotFoundException: /includes/&lt;%= p %&gt;.jsp. Схоже <%= p %>, використовується так, як є в шляху до файлу!
Ахілеш Б Чандран

7
Не використовуйте сценарії. Використовуйте JSP EL: page = "/ include / $ {param.p}". Або спробуйте сторінку = "<% =" / включає / "+ p%>".
JB Nizet

3
Дякую. Я використав це так: <jsp:include page="<%= "includes/" + p + ".jsp" %>" />і він працює зараз :)
Ахілеш Б Чандран

2
Дуже гарна відповідь! Я дуже часто бачив цю схему (центральний контролер в index.jsp), і це завжди призводить до неприємностей.
Маттіас Гринішак

Чи не повинен це бути час перекладу? І я думаю, ви все ще можете використовувати параметри з цим?
Корай Тугай

26

Ви можете використовувати такі параметри

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

і

у about.jsp можна взяти параметр

<%String leftAds = request.getParameter("articleId");%>

18

Ви можете використовувати Включити директиви

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

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

<% 
 }
%>

або JSP включати дії

<%
 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

Чи можете ви перевірити, чи справді працює ваш перший приклад? Я не можу, здається, змусити його працювати.
липня 1313

8

Під час перекладу сторінки вміст файлу, наведеного в директиві include, "вставляється" таким, яким він є, в тому місці, де використовується директива включення JSP. Тоді вихідна сторінка JSP перетворюється на клас сервлетів java. Доданий файл може бути статичним ресурсом або сторінкою JSP. Як правило, директива, включаючи JSP, використовується для включення банерів і колонтитулів заголовків.

Синтаксис для файлу jsp:

<%@ include file="relative url">

Приклад

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

6

1. <a href="index.jsp?p=products">Products</a>Коли користувач натискає посилання Продукти, ви можете безпосередньо зателефонувати на 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. ви можете підтримувати зовнішній файл ресурсу з парами ключів, значень. як нижче

products : products.jsp

customer : customers.jsp

Ви можете програмно отримати ім'я файлу JSP з файлу properies.

таким чином ви можете легко змінити ім'я файлу JSP


Дякую. Я використовую перше, що зараз. Насправді у мене проблеми з тим, як це зробити!
Ахілеш Б Чандран

org.apache.jasper.JasperException: /admin.jsp(239,44) PWC6117: File "/<%=p%>" not found. Це працювало у вашій стороні?
Ахілеш Б Чандран

це перевірка проблеми, пов’язана з трактом, чи існує файл у шляху ур, я думаю, ур відсутній контекстний шлях (повинен бути включений / admin.jsp). Я не імітував entre scenerio мою сторону
Balaswamy Vaddeman

1
Я спробував повторювати значення "p". Це: includes/add.jsp. Потім використовували це похідне включає: <%@ include file="includes/add.jsp" %>. Він показує вміст сторінки. Але якщо я використовую цей рядок замість:, <%@ include file="<%=p%>" %>він показує виняток!
Ахілеш Б Чандран

Привіт, у мене така ж проблема. Помилка отримання File "<%=p%>" not found. Якщо я буду використовувати реальну цінність, це працює.
Редді СК

0

З тієї причини, яку я ще не розумію, після того як я використовував <%@include file="includes/footer.jsp" %>у своїх index.jspтоді інших файлах jsp, як register.jspя мав використовувати <%@ include file="footer.jsp"%>. Як ви бачите, більше не потрібно було використовувати повний шлях, STS зберігав мій початковий шлях.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.