在JSF子视图中混合使用HTML和JSF

时间:2010-01-07 13:34:16

标签: jsp jsf subview jspinclude

我今天遇到的问题是使用JSF在包含的JSP中处理HTML。 所以情况就是这样:我使用IBM的JSF 1.2在RAD和Websphere v6.1上使用自定义组件(来自公司层)来使用标签。 为了获得更清晰的代码,我只想在分离的JSP中分离每个选项卡的JSF代码,这样,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组件,但似乎在JSF生成的HTML之外,HTML之后处理HTML。像

这样的东西
<table>
    <!-- generated content -->
</table>
<div id="myDivId">
...

虽然表应该在div里面。我试图以不同的方式使用<f:verbatim>标记,唯一的解决方案是通过逐字打开和关闭标记来围绕<div></div>,这很脏并使Websphere变得疯狂。< / p>

谷歌没有发现任何相关内容,那么你们有没有遇到同样的问题?是否有可能找到一个干净的解决方案,或者我是否必须在同一个JSP中包含我的所有代码?提前谢谢。

1 个答案:

答案 0 :(得分:2)

首先,这可以被认为是传统的JSF 1.0 / 1.1行为。确实需要f:verbatim将模板文本放入JSF组件树中。但是,f:verbatim完全是多余的,因为2006的JSF 1.2的新视图处理程序会自动将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>