Пользовательский компонент JSF 1.2 из jsp:include

Прежде чем я начну с моего вопроса, вот мои досадные ограничения:

  1. Я использую JSF 1.2, а не 2; поэтому нет составного компонента.
  2. Я использую JSP для рендеринга вместо Facelets; так что ни один из этих составных компонентов тоже.
  3. Мне не разрешено использовать какие-либо сторонние библиотеки тегов (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.

Другие вопросы по тегам