Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsp 在JSF子视图中混合HTML和JSF_Jsp_Jsf_Subview_Jspinclude - Fatal编程技术网

Jsp 在JSF子视图中混合HTML和JSF

Jsp 在JSF子视图中混合HTML和JSF,jsp,jsf,subview,jspinclude,Jsp,Jsf,Subview,Jspinclude,我今天遇到的问题是如何使用JSF在包含的JSP中处理HTML。 所以情况是这样的:我在RAD上使用IBM的JSF1.2和WebSphereV6.1,我有一个自定义组件(来自公司层)来使用选项卡。 为了获得更清晰的代码,我只想在一个单独的JSP中分离每个选项卡的JSF代码,这样,main.JSP: <customTag:tabComponent> <jsp:include page="/jsp/workflow/tab1.jsp"></jsp:include>

我今天遇到的问题是如何使用JSF在包含的JSP中处理HTML。 所以情况是这样的:我在RAD上使用IBM的JSF1.2和WebSphereV6.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组件是经过处理的,但HTML似乎是在JSF生成的HTML之外处理的,并在之后出现。差不多

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

...
虽然表应该在div中,但我尝试以不同的方式使用
标记,唯一的解决方案是通过逐字的开始和结束标记来包围
,这是肮脏的,让Websphere变得疯狂


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

首先,这可以看作是遗留的JSF1.0/1.1行为。将模板文本带入JSF组件树确实需要
f:verbatim
。然而,
f:verbatim
是完全多余的,因为2006年JSF1.2的新视图处理程序自动将
f:view
中的任何模板文本带入组件树。因此,您真的在使用JSF1.2吗?WebSphere6.1附带内置的JSF1.1库,升级到1.2并不像将lib放在
/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>

麦勒根

再次感谢您抽出时间。也许这很愚蠢,但是,我怎么知道JSF版本呢?我认为它是1.2,但你应该是对的,因为公司提供了整个环境,我没有做任何更改,所以我想它仍然是JSF1.1。关于您的解决方案:我已经尝试过了,在您回答后又尝试了一次,并且在我第一次启动Websphere时它就起作用了,但是在“重新发布”之后,我得到了一个“重新发布失败”(不确定确切的翻译,法语RAD环境),因为缺少。因此,每次我都必须重新启动WS以使其正常工作。(顺便说一句,令人印象深刻的概要文件!)如果您使用的是JSF1.2,您会在启动日志中看到这一点(1.1中没有)。此外,您还可以使用1.2-only类,如
ValueExpression
,或1.2-only方法,如
Application\#evaluateExpressionGet()
,或1.2-only标记,如
f:setPropertyActionListener
h:panelGroup layout=“block”
。至于发布后的“重新发布失败”错误,我怀疑是脏的类路径。确保整个类路径中的库中没有版本冲突(不幸的是,从经验中我可以看出,这涉及到Websphere中的许多路径)。我没有发现类路径中有任何奇怪的地方,但我找到的解决方案是在RAD中“当应用程序包含错误时启用发布”,因此它不会抱怨“交叉标签”在出版过程中。输出仍然正确,所以它是确定的(我会在这里张贴,如果我找到更多的东西,为其他人)。谢谢。