Пользовательский компонент JSF 1.2 из jsp: include - PullRequest
2 голосов
/ 24 февраля 2012

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

  1. Я использую JSF 1.2, а не 2; поэтому нет составного компонента.
  2. Я использую JSP для рендеринга вместо граней; так что ни один из этих составных компонентов тоже.
  3. Мне не разрешено использовать любые сторонние библиотеки тегов (richFaces, iceFaces и т. Д.)

Эти ограничения установлены в камне.

Теперь переходим к моему вопросу. В настоящее время у нас есть JSP subview, который обрабатывает создание адреса. Есть много javascript, который сопровождает это, наряду с бобом поддержки. Эта страница никогда не используется напрямую. Вместо этого он включается с использованием <jsp:include />.

Однако есть несколько атрибутов, которые я хочу изменить. Например, требуется ли округ, в настоящее время мы проводим очистку адресов и т. Д. Для этого имеет смысл использовать пользовательский компонент (я думаю?). Тем не менее, я не совсем уверен, лучший способ сделать это.

Если бы я мог, я бы просто превратил этот JSP в составной компонент и покончил бы с этим. Тем не менее, это не совсем вариант, основанный на моих ограничениях.

Какие у меня варианты? Это не было бы так сложно, если бы не количество задействованного JavaScript. Я знаю, что мое объяснение было расплывчатым; Тем не менее, я ищу больше руководства, чем прямого ответа. Я гуглил такие вещи как пользовательские компоненты JSF 1.x с javascript и т. Д. Однако я не нашел много хороших статей.

Заранее спасибо.

1 Ответ

2 голосов
/ 25 февраля 2012

Создать файл тегов 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.

...