Как использовать JSTL в объявлении JSP

Я хочу использовать JSTL в объявлении JSP. У меня есть код вроде:

<%! void fetchData(String .., String ..){
    //some code...
    pageContext.setAttribute("test",valueForJSTL); // Wont work until I pass pageContext from calling scriptlet
    //some code...
%><%
    //use pageContext variable set above to user in JSP (c:out, wcf:getData etc)**
%><%
}%>

Интересно, почему нельзя использовать скриптлет (строки 5-7) в объявлении JSP. Или есть другой способ справиться с этим?

Я вызываю вышеуказанную функцию из скриптлета, и я хочу, чтобы этот метод выполнял некоторые манипуляции, добавлял переменную в pageContext/request и извлекал переменную в JSTL для извлечения данных из БД.

Вы можете найти полный файл по адресу: http://wikisend.com/download/738986/MyView.jsp JSTL в объявлении "fetchCatalogEntries" не работает.


person Tarun    schedule 04.05.2015    source источник
comment
Не понятно, о чем вы спрашиваете. Пожалуйста, покажите нам ваш реальный JSP, а не фрагменты синтаксиса.   -  person skaffman    schedule 04.05.2015
comment
Здравствуйте! Найдите файл по адресу: wikisend.com/download/738986/MyView.jsp в строке 46 я вызываю декларацию. В функции fetchCatalogEntries я хочу использовать JSTL в строке 88. Однако это не позволяет сделать это. Я не уверен, что мы можем использовать теги скриптлета в методе объявления.   -  person Tarun    schedule 04.05.2015
comment
Извините, но вы сделали почти все, что вы не должны делать в файле JSP, пожалуйста, просмотрите несколько руководств, например. tutorialspoint.com/jsp   -  person Shota    schedule 06.05.2015
comment
Ты не сможешь это сделать. Посоветуйте, пожалуйста, по контексту. Если вы написали этот код, см. комментарий выше. Если это какое-то устаревшее приложение, потребуется альтернативный подход.   -  person Alan Hay    schedule 06.05.2015
comment
Привет @Alan Я знаю, что в JSP много логики. Причина в том, что OOB не поддерживает получение этих деталей в JAVA. Вот почему я должен использовать JSP. Единственная деталь, которую я хотел знать, это почему в декларации JSP переменные pageContext или запроса недоступны.   -  person Tarun    schedule 07.05.2015


Ответы (1)


Это связано с тем, что сгенерированный код скриптлета ‹% %> входит в метод службы, который как бы вызывается снова и над одним и тем же объектом с использованием нескольких потоков запросов.

Принимая во внимание, что ‹%!, переходит в пространство глобального класса или просто объявляет методы и переменные глобальными для страницы JSP.

Следовательно, в вашем скриптлете вы можете вызвать метод, скажем, fetchData() или любой другой, как если бы вы делали это внутри метода service(), как в обычном классе Java.

Вы даже можете объявить поле, как показано ниже, и сослаться на него, как в примере ниже:

<%!
    private final Logger logger = new Logger(this.getClass());
    private UserService userService = null;
    public void jspInit() {
        userService = new UserService();
    }
    private String getUserStatus(String userID) {
        return userServce.getUserStatus(userID);
    }
%>

<%
    String userID = request.getParameter("userid");
    String userStatus = getUserStatus(userID);
%>

Наконец, я бы порекомендовал вам НЕ использовать скриптлеты и использовать теги и библиотеки JSTL, такие как core-tag-libs и многие другие, это поможет вам в долгосрочной перспективе.

person Milind J    schedule 10.05.2015