#spring-boot #jsp #spring-webflow #tld #classnotfound
Вопрос:
Я переношу проект из устаревшей весны в springboot. Проект использует Spring Webflow и планирует сохранить конфигурации для webflow и перенести проект на springboot, обновив структуру проекта и добавив необходимые загрузочные библиотеки.
В настоящее время застрял с исключением jasperexception из встроенных библиотек tomcat jasper, жалующихся на то, что класс, используемый в сигнатуре метода TLD для функции, не найден.
org.apache.jasper.JasperException: Класс [javax.servlet.http.Запрос HttpServletRequest], указанный в подписи метода в TLD для функции [mytld:getAppLink], не может быть найден. [javax.сервлет.http.Запрос HttpServletRequest] в org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:55) ~[tomcat-embed-jasper-9.0.36.jar!/:9.0.36] в org.apache.jasper.компилятор.ErrorDispatcher.dispatch(ErrorDispatcher.java:294) ~[tomcat-embed-jasper-9.0.36.jar!/:9.0.36] в орг.apache.джаспер.компилятор.ErrorDispatcher.jspError(ErrorDispatcher.java:81) ~[tomcat-embed-jasper-9.0.36.jar!/:9.0.36]
Если я обновлю функцию в TLD до функции без аргументов, в этот момент она будет работать нормально. Но в тот момент, когда у меня есть класс для передачи в конструкторе, возникает эта ошибка.
JSP:
<%@ include file="/WEB-INF/jsp/includes/includes.jspf" %>
<%@ taglib prefix="mytld" uri="MyTldLibrary" %>
<div id="header" class="style-header">
<div id="headm">
<a href="${mytld:getAppLink(pageContext.request)}" class="logos"></a>
</div>
</div>
Вот фрагмент моего дву:
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_2.xsd"
version="2.0">
<tlib-version>2.2</tlib-version>
<jsp-version>3.0</jsp-version>
<short-name>mytld</short-name>
<uri>MyTldLibrary</uri>
<description>App EL Functions</description>
<function>
<name>getAppLink</name>
<function-class>
com.app.web.tags.AppWebFunctions
</function-class>
<function-signature>
java.lang.String getAppLink(javax.servlet.http.HttpServletRequest request)
</function-signature>
</function>
</taglib>
Вот фрагмент функции getAppLink из класса AppWebFunctions:
/**
* Gets the App link.
*
* @param request the request
* @return the App link
* @throws UnsupportedEncodingException the unsupported encoding exception
*/
public static final String getAppLink(final HttpServletRequest request) throws UnsupportedEncodingException {
//LOGIC to retrieve applink
return appLink;
}
Ответ №1:
Если я обновлю функцию в TLD до функции без аргументов, в этот момент она будет работать нормально. Но в тот момент, когда у меня есть класс для передачи в конструкторе, возникает эта ошибка.
Это связано <function-signature>
с тем, что не содержит никаких имен параметров, можно указать только полное имя класса типа параметра.
Итак, просто удалите имя request
параметра, и тогда TLD должен работать.
<function-signature>
java.lang.String getAppLink(javax.servlet.http.HttpServletRequest)
</function-signature>
Комментарии:
1. Спасибо тебе, Рави. Это сработало для spring boot. До сих пор мне любопытно, почему это сработало на Weblogic. Но этот вопрос-ВТО.
2. @HKA Я рад, что это сработало. Если вы нашли мой пост полезным, вы также можете проголосовать 🙂 Спасибо.
3. Я пытался. похоже, у меня недостаточно репутации, чтобы голосовать. веб-сайт не позволяет…