Смешайте HTML и JSF в JSF-подпредставлении - PullRequest
0 голосов
/ 07 января 2010

Проблема, с которой я столкнулся сегодня, заключается в работе с HTML во включенной JSP, с JSF. Итак, вот ситуация: я использую JSF 1.2 от IBM на RAD с Websphere v6.1. У меня есть пользовательский компонент (из уровня компании) для использования вкладок. И чтобы иметь более чистый код, я просто хочу отделить код JSF каждой вкладки в отдельном JSP, таким образом, main.jsp:

<customTag:tabComponent>
<jsp:include page="/jsp/workflow/tab1.jsp"></jsp:include>
<div align="right">
    <customTag:switchToTab title="Next" tabValue="2"></customTag:switchToTab>
</div>
</customTag:tabComponent>

И мой tab1.jsp:

<!-- Taglibs declared here -->
<f:verbatim>
<div id="myDivId">
    <fieldset>
        <legend>myLegend</legend>
        <h:outputText value="#{myBean.someContent}"></h:outputText>
        <!-- HERE are a lot of JSF components, selectItems, inputText... -->
    </fieldset>
</div>
</f:verbatim>

Таким образом, компоненты JSF обрабатываются, но кажется, что HTML обрабатывается после и появляется после, вне HTML, сгенерированного JSF. Что-то вроде

<table>
    <!-- generated content -->
</table>
<div id="myDivId">
...

хотя стол должен быть внутри div. Я пытался использовать тег <f:verbatim> по-разному, и единственное решение состояло в том, чтобы окружить <div> и </div> дословно открывающими и закрывающими тегами, что грязно и сводит Websphere с ума.

Google не нашел ничего релевантного, так вы, ребята, уже сталкивались с такой же проблемой? Можно ли найти чистое решение или мне нужно включить весь мой код в одну и ту же JSP? Заранее спасибо.

1 Ответ

2 голосов
/ 07 января 2010

Прежде всего, это распознается как устаревшее поведение JSF 1.0 / 1.1. f:verbatim действительно требовалось для переноса текста шаблона в дерево компонентов JSF. Однако f:verbatim совершенно излишен, так как новый обработчик представления JSF 1.2 2006 года, который автоматически переносит любой текст шаблона внутри f:view в дерево компонентов. Таким образом, вы действительно используете JSF 1.2? Websphere 6.1 поставляется со встроенными библиотеками JSF 1.1, и обновление до 1.2 не так просто, как просто размещение библиотек в /WEB-INF/lib.

Что касается вашей реальной проблемы, вам нужно обернуть только текст шаблона шаблоном f:verbatim, а не компонентами JSF. Таким образом, должно работать следующее:

<f:verbatim>
    <div id="myDivId">
        <fieldset>
            <legend>myLegend</legend>
</f:verbatim>
<h:outputText value="#{myBean.someContent}"></h:outputText>
<!-- HERE are a lot of JSF components, selectItems, inputText... -->
<f:verbatim>
        </fieldset>
    </div>
</f:verbatim>
...