Пользовательский компонент JSF 1.2 из jsp:include
Прежде чем я начну с моего вопроса, вот мои досадные ограничения:
- Я использую JSF 1.2, а не 2; поэтому нет составного компонента.
- Я использую JSP для рендеринга вместо Facelets; так что ни один из этих составных компонентов тоже.
- Мне не разрешено использовать какие-либо сторонние библиотеки тегов (richFaces, iceFaces и т. Д.)
Эти ограничения установлены в камне.
Теперь переходим к моему вопросу. В настоящее время у нас есть JSP subview
который обрабатывает создание адреса. Есть много javascript, который сопровождает это, наряду с бобом поддержки. Эта страница никогда не используется напрямую. Вместо этого он включен с помощью <jsp:include />
,
Однако есть несколько атрибутов, которые я хочу изменить. Например, требуется ли округ, в настоящее время мы проводим очистку адресов и т. Д. Для этого имеет смысл использовать пользовательский компонент (я думаю?). Тем не менее, я не совсем уверен, лучший способ сделать это.
Если бы я мог, я бы просто превратил этот JSP в составной компонент и покончил бы с этим. Тем не менее, это не совсем вариант, основанный на моих ограничениях.
Какие у меня варианты? Это не было бы так сложно, если бы не количество задействованного JavaScript. Я знаю, что мое объяснение было расплывчатым; Тем не менее, я ищу больше руководства, чем прямого ответа. Я гуглил такие вещи, как пользовательские компоненты JSF 1.x с javascript и т. Д. Однако я не нашел много хороших статей.
Заранее спасибо.
1 ответ
Создайте файл тега JSP.
/WEB-INF/tags/foo.tag
<%@ tag body-content="empty" %>
<%@ attribute name="countryRequired" required="false" type="java.lang.Boolean" %>
<%@ attribute name="showAddress" required="false" type="java.lang.Boolean" %>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<h:panelGrid columns="2">
<h:outputLabel for="country" value="Country" />
<h:inputText id="country" value="#{bean.country}" required="${countryRequired}" />
<c:if test="${showAddress}">
<h:outputLabel for="address" value="Address" />
<h:inputText id="address" value="#{bean.address}" />
</c:if>
</h:panelGrid>
Объявите и используйте его следующим образом (дополнительная настройка XML не требуется):
<%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
...
<my:foo showAddress="true" />
Обратите внимание, что JSTL здесь также является тегом "view build time", как в Facelets. Также обратите внимание, что вы не можете использовать #{}
ссылаться на атрибуты тега JSP.