2013-11-21 2 views
0

Это мои первые шаги в файле тега. Может быть, этот вопрос очень прост. Но я не могу это решить.Как получить переменную из scriplet в файле тега

У меня есть тег следующий файл

<% 
Foo foo=new Foo(); 
%> 
<jsp:include page="${foo.getFileName()}"/> 

мне кажется, что яшма не видит переменную Foo. Что я делаю не так?

ответ

0

Использование языка выражения ${...} Ваша переменная должна быть доступна в одной из областей PageContext, Request, Session, Application....

Для того, чтобы сделать ваш код работать, вы должны изменить его на:

<% 
Foo foo=new Foo(); 
pageContext.setAttribute("foo", foo); 
%> 
<jsp:include page="${foo.getFileName()}"/> 

Если вы используете файл тегов, то предпочитают возможно jspContext вместо pageContext:

<% 
    Foo foo=new Foo(); 
    jspContext.setAttribute("foo", foo); 
    %> 
    <jsp:include page="${foo.getFileName()}"/> 
+0

Спасибо за ваше время. Но когда я использую pagecontext, я получил следующее: .org.apache.jasper.JasperException: PWC6033: ошибка в компиляции Javac для JSP PWC6197: произошла ошибка в строке: 11 в файле jsp:/WEB-INF/tags/insertArea. тег PWC6199: Сгенерированная ошибка сервлета: не найден символ символ: переменная страницаContext –

+0

Я обновил сообщение. Если вы посмотрите на исключение, кажется, что ваш код запущен в файле тега –

0

$ { некоторое имя переменной} принимает имя переменной из области, например запрос/сессии/приложения.

Но ваш объект foo не был установлен ни в каких областях.

только для примера use session.setAttribute("foo", foo) или pageContext.setAttribute(...)внутри скриптлета и попробуйте.

Теперь попробуйте понять области применения, и какая область лучше подходит для вашего приложения.

0

Здесь scrptlet foo не признается в <jsp:include/>EL

Использование <jsp:useBean/> действия для использования в качестве <jsp:include/> EL

<jsp:useBean id="foo" class="packeage.Foo" scope="page"/> 
<jsp:include page="${foo.fileName}"/> 
Смежные вопросы