首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

ADF Faces: 避免施用<jsp:include>标签

2012-11-19 
ADF Faces: 避免使用jsp:include标签在使用ADF进行应用程序的开发时,应该避免使用jsp:include标签来包

ADF Faces: 避免使用<jsp:include>标签

在使用ADF进行应用程序的开发时,应该避免使用<jsp:include>标签来包含子的ADF Faces页面,因为:

1. 子页面中的控件ID有可能会和父页面的控件ID冲突;

2. 不能将子页面作为一个局部刷新对象,因为不支持partialTriggers属性;

3. 不能使用JSF的表达式语言动态传递参数给子页面,因为<jsp:param/>是为JSP设计的,不支持动态传递参数;

4. 不能使用MDS来客户化<jsp:include/>标签。

?

所以,应该使用ADF提供的<af:declarativeComponent>标签,因为:

1. 该标签是一个有自己ID的命名容器,父子页面不会发生控件ID冲突;

2. 该标签支持partialTriggers属性,所以可以将其设置为一个局部刷新对象;

3. 可以使用<f:attribute/>标签,动态传递参数给子页面;

4. 可以使用MDS客户化该标签。

?

所以,替换下面的代码

<jsp:include page="/includes/myIncludeFragment.jsff">  <jsp:param name="myParam" value="myValue"/></jsp:include>

<af:declarativeComponent id="dc0" viewId="/includes/myIncludeFragment.jsff" myParam="myValue"/>

?

注意,标签中使用了myParam属性,这个属性必须定义到申明式控件的定义文件中,如下:

<?xml version='1.0' encoding='UTF-8'?><jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:f="http://java.sun.com/jsf/core"          xmlns:af="http://xmlns.oracle.com/adf/faces/rich" version="2.1">    <af:componentDef var="attrs">        <af:xmlContent>            <component xmlns="http://xmlns.oracle.com/adf/faces/rich/component">                <description>my fragment</description>                <attribute>                    <attribute-name>myParam</attribute-name>                    <attribute-class>java.lang.String</attribute-class>                    <required>true</required>                </attribute>            </component>        </af:xmlContent>        <!-- Actual content goes here-->        <af:outputText value="#{attrs.myParam}"/>    </af:componentDef></jsp:root>

?

补充说明:

关于上面提到的控件ID冲突的问题,也可以通过使用<f:subview/>标签包含子页面来解决。但是不论使用<af:declarativeComponent/>标签还是<f:subview/>标签,都会有另外一个问题:子页面的页面定义文件(Page Definition File)不会被读取,也就是说,子页面和父页面共享父页面的页面定义文件,而没有单独的页面定义文件。

所以如果子页面需要单独的页面定义文件,那么就需要使用ADF template或者Region了。

?

原文来自以下链接:

https://blogs.oracle.com/jheadstart/entry/avoid_use_of_jspinclude_where

热点排行