2011-10-16 2 views
2

посмотреть все вы знаете о включении файла в JSP ... у меня есть 2 файлаКак проверить, что файл jsp включен или нет в другом файле jsp?

one.jsp two.jsp

в two.jsp я ниже данного кода

Long something = 0; 

в one.jsp код

<%@include file='two.jsp'%> 
<%@include file='two.jsp'%> 

я включил тот же самый файл в два раза,

так что будет ошибка, потому что что-то переменное будет создано 2 раз, правильно?

так что это означает, прежде чем включать файл во второй раз, я должен проверить, что если после его включения, то я не должен повторять его снова, как проверить что?

как в php есть такие функции, как include ("file.php"); // который будет включать файл

и include_once ("file.php"); // этот файл будет включать файл, если он не включен ранее,

ЛЮБОЙ ЛЮБЫЕ решения для этого ????

ответ

2

Действительно, наличие этих двух статических включений приведет к ошибке с тем, что одна и та же переменная объявлена ​​дважды. Импорт во время компиляции добавит код включенной страницы в включительный, а затем будет скомпилирован.

Я не знаю ни одного include_once подхода встроенный в JSP, но вы могли бы сделать что-то подобное, имея глобальный Set (т.е. HashSet), объявленный в качестве переменной на странице верхнего уровня, или как запрос атрибут (который вы должны очистить при завершении обработки), в котором вы могли бы добавлять имена уже включенных страниц.

one.jsp

<% HashSet<String> pagesSet = new HashSet<String>(); %> 
... 
<%@include file='two.jsp'/> 

two.jsp

<% if (!pagesSet.contains("two.jsp"){ %> 
    //... Remember to actually ADD two.jsp to pageSet, 
    // because it IS being included NOW. 
    pageSet.add("two.jsp"); 

    // Entire contents of two.jsp 
    // .... 
<% } %> 

Примечание это очень похоже на #ifndef #define #endif узор в С.

Примите во внимание, что с помощью динамического вы избегаете проблемы с повторяющимися переменными. Включенная страница будет выполняться в собственной области действия и для доступа к серверным переменным вам необходимо будет передать их с помощью <jsp:param> или в одном из полей Request, Session или Application.См ответ на этот вопрос для различия между статическим и динамическим включает в себя: include directive and attribute name problem

Кроме того, если у вас есть большое количество тех, кто «условно» статический включает в себя, вы можете в конечном итоге удара 64K method limit

+0

Пожалуйста, примите во внимание в matisations, которые я в последний раз представил в ответе, и помните, что сценарии (java-код в '<% %>' в JSP's) считаются [плохой практикой] (http://stackoverflow.com/questions/3177733). Вы должны использовать [Unified Expression Language] (http://download.oracle.com/javaee/5/tutorial/doc/bnahq.html) и [JSTL] (http://download.oracle.com/javaee/1.4 /tutorial/doc/JSTL.html#wp74644). –

+0

Мне тоже жаль, но это не фабрика кода. Конечно, я ** не тестировал этот фрагмент, и теперь я этого не сделаю. Предложений в ответе должно быть достаточно. Какая у вас проблема? –

+0

, прежде чем включать страницу two.jsp в one.jsp, я должен проверить, что two.jsp включен или нет в one.jsp, если не включен файл 2.jsp, он должен быть включен. как это .... в вашем коде two.jsp вызывается два раза и что я не хочу, просто дайте мне проверенный код – Jayesh

Смежные вопросы