|
Java EE 5 SDK 深圳电信培训中心.徐海蛟老师. |
||||||||
上一个类 下一个类 | 框架 无框架 | ||||||||
摘要: 嵌套 | 字段 | 构造器 | 方法 | 详细信息: 字段 | 构造器 | 方法 |
javax.faces.webapp Class UIComponentClassicTagBase
java.lang.Object javax.faces.webapp.UIComponentTagBase javax.faces.webapp.UIComponentClassicTagBase
- 所有已实现的接口:
- BodyTag, IterationTag, JspIdConsumer, JspTag, Tag
- 直接已知子类:
- UIComponentELTag, UIComponentTag
public abstract class UIComponentClassicTagBase
- extends UIComponentTagBase
- implements JspIdConsumer, BodyTag
UIComponentTagBase
is the base class
for all JSP tags that use the "classic" JSP tag interface that
correspond to a UIComponent
instance in
the view. In Faces 1.2, all component tags are BodyTag
instances to allow for the execution of the page to build the
component tree, but not render it. Rendering happens only after the
component tree is completely built.
UIComponentTag
extends
UIComponentClassicTagBase
to add support for properties
that conform to the Faces 1.1 EL.
UIComponentELTag
extends
UIComponentClassicTagBase
class to add support for
properties that conform to the EL API.
The default implementation allows the proper interweaving of template text, non-Faces JSP tag output, and Faces component tag output in the same page, as expected by the page author.
The CASE markers in the following example will be cited in the method descriptions of this class.
CASE 1 describes template text and/or non-component custom tag output occurring as the child of a component tag, but before the first component tag child of that component tag.
CASE 2 describes template text and/or non-component custom tag output occurring between two sibling component tags.
CASE 3 describes template text and/or non-component custom tag output occurring as the child content of an <f:verbatim> tag at any point in the page.
CASE 4 describes template text and/or non-component custom tag output occurring between the last child component tag and its enclosing parent component tag's end tag.
<h:panelGrid style="color:red" border="4" columns="2">
CASE 1
<h:outputText value="component 1"/>
CASE 2
<h:outputText value="component 2"/>
<f:verbatim>CASE 3</f:verbatim>
<c:out value="${pageScope.CASE4}" />
</h:panelGrid>
The preceding arrangement of faces component tags, must yield
markup that will render identically to the following (assuming that
${pageScope.CASE4}
evaluates to "CASE 4
"
without the quotes).
<table border="4" style="color:red">
<tbody>
<tr><td>CASE 1</td></tr> <tr><td>component 1</td></tr>
<tr><td>CASE 2</td> <tr><td>component 2</td></tr>
<tr><td>CASE 3</td> <td>CASE 4</td></tr>
</tbody>
</table>
字段摘要 | |
---|---|
protected BodyContent |
bodyContent
The bodyContent for this tag handler. |
protected PageContext |
pageContext
The JSP PageContext for the page we are embedded in. |
protected static String |
UNIQUE_ID_PREFIX
Used as the prefix for ids. |
Fields inherited from class javax.faces.webapp.UIComponentTagBase |
---|
log |
Fields inherited from interface javax.servlet.jsp.tagext.BodyTag |
---|
EVAL_BODY_BUFFERED, EVAL_BODY_TAG |
Fields inherited from interface javax.servlet.jsp.tagext.IterationTag |
---|
EVAL_BODY_AGAIN |
Fields inherited from interface javax.servlet.jsp.tagext.Tag |
---|
EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE |
构造器摘要 | |
---|---|
UIComponentClassicTagBase()
|
方法摘要 | |
---|---|
protected void |
addChild(UIComponent child)
Add the component identifier of the specified UIComponent
to the list of component identifiers created or located by nested
UIComponentTag s processing this request. |
protected void |
addFacet(String name)
Add the facet name of the specified facet to the list of facet names created or located by nested UIComponentTag s
processing this request. |
protected void |
addVerbatimAfterComponent(UIComponentClassicTagBase parentTag,
UIComponent verbatim,
UIComponent component)
Add verbatim as a sibling of component in component in the parent's child list. |
protected void |
addVerbatimBeforeComponent(UIComponentClassicTagBase parentTag,
UIComponent verbatim,
UIComponent component)
Add verbatim as a sibling of component in component in the parent's child list. |
protected abstract UIComponent |
createComponent(FacesContext context,
String newId)
Create and return a new child component of the type returned by calling getComponentType() . |
protected UIOutput |
createVerbatimComponent()
Use the Application instance to create a new component
with the following characteristics. |
protected UIComponent |
createVerbatimComponentFromBodyContent()
Create a transient UIOutput component from the body content, of this tag instance or return null if there is no body content, the body content is whitespace, or the body content is a comment. |
int |
doAfterBody()
Perform any processing necessary to handle the content implications of CASE 4 in the class description. |
int |
doEndTag()
Perform any processing necessary to handle the content implications of CASE 3 in the class description. |
void |
doInitBody()
Prepare for evaluation of the body. |
int |
doStartTag()
Perform any processing necessary to find (or create) the UIComponent instance in the view corresponding to this
tag instance in the page and, if and only if a component was
created, insert it into the tree at the proper location as
expected by the page author. |
protected void |
encodeBegin()
Deprecated. No encoding is done during JSP page execution. Encoding is deferred until the page has completed executing to allow the entire tree to be built before any encoding occurs. |
protected void |
encodeChildren()
Deprecated. No encoding is done during JSP page execution. Encoding is deferred until the page has completed executing to allow the entire tree to be built before any encoding occurs. |
protected void |
encodeEnd()
Deprecated. No encoding is done during JSP page execution. Encoding is deferred until the page has completed executing to allow the entire tree to be built before any encoding occurs. |
protected UIComponent |
findComponent(FacesContext context)
Find and return the UIComponent , from the component
tree, that corresponds to this tag handler instance. |
BodyContent |
getBodyContent()
|
UIComponent |
getComponentInstance()
Return the UIComponent instance that is associated with
this tag instance. |
boolean |
getCreated()
Return true if we dynamically created a new component
instance during execution of this tag. |
protected List<String> |
getCreatedComponents()
Returns the List of UIComponent ids created or
located by nested UIComponentTag s while processing the current
request. |
protected int |
getDoAfterBodyValue()
Return the flag value that should be returned from the doAfterBody() method when it is called. |
protected int |
getDoEndValue()
Return the flag value that should be returned from the doEnd() method when it is called. |
protected int |
getDoStartValue()
Return the flag value that should be returned from the doStart() method when it is called. |
protected FacesContext |
getFacesContext()
Return the FacesContext instance for the current
request. |
protected String |
getFacesJspId()
If this method has been called before on this tag's useful lifetime (before release() was called), return the
previously returned value. |
protected String |
getFacetName()
Return the facet name that we should be stored under, if any; otherwise, return null (indicating that we will be a child component). |
protected String |
getId()
Return the id value assigned by the page author. |
protected int |
getIndexOfNextChildTag()
Return the index of the next child to be added as a child of this tag. |
String |
getJspId()
|
Tag |
getParent()
Return the Tag that is the parent of this instance. |
static UIComponentClassicTagBase |
getParentUIComponentClassicTagBase(PageContext context)
Locate and return the nearest enclosing UIComponentClassicTagBase
if any; otherwise, return null . |
JspWriter |
getPreviousOut()
Get the JspWriter from our BodyContent . |
protected abstract boolean |
hasBinding()
Return true if this component has a
non-null binding attribute. |
void |
release()
Release any resources allocated during the execution of this tag handler. |
void |
setBodyContent(BodyContent bodyContent)
Set the bodyContent for this tag handler. |
void |
setId(String id)
Set the component identifier for our component. |
void |
setJspId(String id)
Defined on JspIdConsumer . |
void |
setPageContext(PageContext pageContext)
Set the PageContext of the page containing this
tag instance. |
void |
setParent(Tag parent)
Set the Tag that is the parent of this instance. |
protected abstract void |
setProperties(UIComponent component)
Override properties and attributes of the specified component, if the corresponding properties of this tag handler instance were explicitly set. |
protected void |
setupResponseWriter()
Set up the ResponseWriter for the
current response, if this has not been done already. |
类方法继承 javax.faces.webapp.UIComponentTagBase |
---|
getComponentType, getELContext, getRendererType |
类方法继承 java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
字段详细信息 |
---|
UNIQUE_ID_PREFIX
protected static final String UNIQUE_ID_PREFIX
- Used as the prefix for ids. This is necessary to avoid
uniqueness conflicts with the transient verbatim components.
- 另请参见:
- 常量字段
bodyContent
protected BodyContent bodyContent
The
bodyContent
for this tag handler.
pageContext
protected PageContext pageContext
The JSP
PageContext
for the page we are embedded in.
构造器详细信息 |
---|
UIComponentClassicTagBase
public UIComponentClassicTagBase()
方法详细信息 |
---|
getDoStartValue
protected int getDoStartValue() throws JspException
Return the flag value that should be returned from the
doStart()
method when it is called. Subclasses may override this method to return the appropriate value.- 抛出异常:
JspException
- to causedoStart()
to throw an exception
getDoEndValue
protected int getDoEndValue() throws JspException
Return the flag value that should be returned from the
doEnd()
method when it is called. Subclasses may override this method to return the appropriate value.- 抛出异常:
JspException
- to causedoEnd()
to throw an exception
encodeBegin
protected void encodeBegin() throws IOException
- Deprecated. No encoding is done during JSP page execution.
Encoding is deferred until the page has completed executing to
allow the entire tree to be built before any encoding occurs.
Delegate to the
encodeBegin()
method of our correspondingUIComponent
. This method is called fromdoStartTag()
. Normally, delegation occurs unconditionally; however, this method is abstracted out so that advanced tags can conditionally perform this call.- 抛出异常:
IOException
- if an input/output error occurs
encodeChildren
protected void encodeChildren() throws IOException
- Deprecated. No encoding is done during JSP page execution.
Encoding is deferred until the page has completed executing to
allow the entire tree to be built before any encoding occurs.
Delegate to the
encodeChildren()
method of our correspondingUIComponent
. This method is called fromdoStartTag()
. Normally, delegation occurs unconditionally; however, this method is abstracted out so that advanced tags can conditionally perform this call.- 抛出异常:
IOException
- if an input/output error occurs
encodeEnd
protected void encodeEnd() throws IOException
- Deprecated. No encoding is done during JSP page execution.
Encoding is deferred until the page has completed executing to
allow the entire tree to be built before any encoding occurs.
Delegate to the
encodeEnd()
method of our correspondingUIComponent
. This method is called fromdoStartTag()
. Normally, delegation occurs unconditionally; however, this method is abstracted out so that advanced tags can conditionally perform this call.- 抛出异常:
IOException
- if an input/output error occurs
setPageContext
public void setPageContext(PageContext pageContext)
Set the
PageContext
of the page containing this tag instance.- 规范说明:
setPageContext
in interfaceTag
- 参数:
pageContext
- The enclosingPageContext
getParent
public Tag getParent()
Return the
Tag
that is the parent of this instance.- 返回:
- the current parent, or null if none.
- 另请参见:
TagSupport.findAncestorWithClass(javax.servlet.jsp.tagext.Tag, java.lang.Class)
setParent
public void setParent(Tag parent)
Set the
Tag
that is the parent of this instance.- 参数:
parent
- The new parentTag
setupResponseWriter
protected void setupResponseWriter()
Set up the
ResponseWriter
for the current response, if this has not been done already.@deprecated.
ViewHandler.renderView(javax.faces.context.FacesContext, javax.faces.component.UIViewRoot)
is now responsible for setting up the response writer. This method is now a no-op.
findComponent
protected UIComponent findComponent(FacesContext context) throws JspException
Find and return the
UIComponent
, from the component tree, that corresponds to this tag handler instance. If there is no suchUIComponent
, create one and add it as a child or facet of theUIComponent
associated with our nearest enclosingUIComponentTag
. The process for locating or creating the component is:- If we have previously located this component, return it.
- Locate the parent component by looking for a parent
UIComponentTag
instance, and ask it for its component. If there is no parentUIComponentTag
instance, this tag represents the root component, so get it from the currentTree
and return it. - If this
UIComponentTag
instance has thefacetName
attribute set, ask the parentUIComponent
for a facet with this name. If not found, create one, callsetProperties()
with the new component as a parameter, and register it under this name. Return the found or created facetUIComponent
. - Determine the component id to be assigned to the new
component, as follows: if this
UIComponentTag
has anid
attribute set, use that value; otherwise, generate an identifier that is guaranteed to be the same for thisUIComponent
every time this page is processed (i.e. one based on the location of allUIComponentTag
instances without anid
attribute set). - Ask the parent
UIComponent
for a child with this identifier. If not found, create one, callsetProperties()
with the new component as a parameter, and register it as a child with this identifier. Return the found or created childUIComponent
.
When creating a component, the process is:
- Retrieve the component type by calling
UIComponentTagBase.getComponentType()
- If the component has a
binding
attribute, create an expression from it, and callApplication.createComponent(java.lang.String)
with that expression, theFacesContext
, and the component type. Store the expression using the key"binding"
. - Otherwise, call
Application.createComponent(java.lang.String)
with only the component type. - Call
setProperties()
. - Add the new component as a child or facet of its parent
- 抛出异常:
JspException
getParentUIComponentClassicTagBase
public static UIComponentClassicTagBase getParentUIComponentClassicTagBase(PageContext context)
Locate and return the nearest enclosing
UIComponentClassicTagBase
if any; otherwise, returnnull
.- 参数:
context
-PageContext
for the current page
getIndexOfNextChildTag
protected int getIndexOfNextChildTag()
- Description copied from class:
UIComponentTagBase
Return the index of the next child to be added as a child of this tag. The default implementation maintains a list of created components and returns the size of the list.
- 规范说明:
getIndexOfNextChildTag
in classUIComponentTagBase
addChild
protected void addChild(UIComponent child)
- Description copied from class:
UIComponentTagBase
Add the component identifier of the specified
UIComponent
to the list of component identifiers created or located by nestedUIComponentTag
s processing this request.- 规范说明:
addChild
in classUIComponentTagBase
- 参数:
child
- New child whose identifier should be added
addFacet
protected void addFacet(String name)
- Description copied from class:
UIComponentTagBase
Add the facet name of the specified facet to the list of facet names created or located by nested
UIComponentTag
s processing this request.- 规范说明:
addFacet
in classUIComponentTagBase
- 参数:
name
- Facet name to be added
createVerbatimComponentFromBodyContent
protected UIComponent createVerbatimComponentFromBodyContent()
Create a transient UIOutput component from the body content, of this tag instance or return null if there is no body content, the body content is whitespace, or the body content is a comment.
createVerbatimComponent
protected UIOutput createVerbatimComponent()
Use the
Application
instance to create a new component with the following characteristics.componentType
isjavax.faces.HtmlOutputText
.transient
istrue
.escape
isfalse
.id
isFacesContext.getViewRoot().createUniqueId()
addVerbatimBeforeComponent
protected void addVerbatimBeforeComponent(UIComponentClassicTagBase parentTag, UIComponent verbatim, UIComponent component)
Add verbatim as a sibling of component in component in the parent's child list. verbatim is added to the list at the position immediatly preceding component.
addVerbatimAfterComponent
protected void addVerbatimAfterComponent(UIComponentClassicTagBase parentTag, UIComponent verbatim, UIComponent component)
Add verbatim as a sibling of component in component in the parent's child list. verbatim is added to the list at the position immediatly following component.
doStartTag
public int doStartTag() throws JspException
Perform any processing necessary to find (or create) the
UIComponent
instance in the view corresponding to this tag instance in the page and, if and only if a component was created, insert it into the tree at the proper location as expected by the page author. Secondarily, cause a transientUIOutput
component to be created and placed in the tree before theUIComponent
instance for this tag. The value of thisUIOutput
component must include anything covered byCASE 1
orCASE 2
in the class description.The default implementation, which is intended to be sufficient for most components, implements this secondary requirement by calling
getParentUIComponentClassicTagBase(javax.servlet.jsp.PageContext)
, and callingcreateVerbatimComponentFromBodyContent()
on the result. It then adds the returned component to the tree before the actual component for this tag instance instance by callingaddVerbatimBeforeComponent(javax.faces.webapp.UIComponentClassicTagBase, javax.faces.component.UIComponent, javax.faces.component.UIComponent)
.Before returning, the component is pushed onto the component stack for this response to enable the
getParentUIComponentClassicTagBase(javax.servlet.jsp.PageContext)
method to work properly.The flag value to be returned is acquired by calling the
getDoStartValue()
method, which tag subclasses may override if they do not want the default value.- 规范说明:
doStartTag
in interfaceTag
- 返回:
- EVAL_BODY_INCLUDE if the tag wants to process body, SKIP_BODY if it does not want to process it.
- 抛出异常:
JspException
- if an error occurs- 另请参见:
BodyTag
doEndTag
public int doEndTag() throws JspException
Perform any processing necessary to handle the content implications of CASE 3 in the class description.
The default implementation, which is intended to be sufficient for most components, calls
createVerbatimComponentFromBodyContent()
on this instance and adds it as a child of the component for this tag's component at the end of the child list. In addition, the following housekeeping steps are taken.- Retrieve from the
UIComponent
the set of component ids of child components created byUIComponentTag
instances the last time this page was processed (if any). Compare it to the list of children created during this page processing pass, and remove all children present in the old list but not the new. Save the new list as a component attribute so that it gets saved as part of the component's state. - Retrieve from the
UIComponent
the set of facet names of facets created byUIComponentTag
instances the last time this page was processed (if any). Compare it to the list of facets created during this page processing pass, and remove all facets present in the old list but not the new. Save the new list as a component attribute so that it gets saved as part of the component's state. - Release all references to the component, and pop it from the component stack for this response, removing the stack if this was the outermost component.
The flag value to be returned is acquired by calling the
getDoEndValue()
method, which tag subclasses may override if they do not want the default value.- Retrieve from the
- 返回:
- indication of whether to continue evaluating the JSP page.
- 抛出异常:
JspException
- if an error occurs
release
public void release()
Release any resources allocated during the execution of this tag handler.
getDoAfterBodyValue
protected int getDoAfterBodyValue() throws JspException
Return the flag value that should be returned from the
doAfterBody()
method when it is called. Subclasses may override this method to return the appropriate value.- 抛出异常:
JspException
setBodyContent
public void setBodyContent(BodyContent bodyContent)
Set the
bodyContent
for this tag handler. This method is invoked by the JSP page implementation object at most once per action invocation, beforedoInitiBody()
. This method will not be invoked for empty tags or for non-empty tags whosedoStartTag()
method returnsSKIP_BODY
orEVAL_BODY_INCLUDE
.- 规范说明:
setBodyContent
in interfaceBodyTag
- 参数:
bodyContent
- The newBodyContent
for this tag- 另请参见:
BodyTag.doInitBody()
,IterationTag.doAfterBody()
getPreviousOut
public JspWriter getPreviousOut()
Get the
JspWriter
from ourBodyContent
.
getBodyContent
public BodyContent getBodyContent()
doInitBody
public void doInitBody() throws JspException
Prepare for evaluation of the body. This method is invoked by the JSP page implementation object after
setBodyContent()
and before the first time the body is to be evaluated. This method will not be invoked for empty tags or for non-empty tags whosedoStartTag()
method returnsSKIP_BODY
orEVAL_BODY_INCLUDE
.- 规范说明:
doInitBody
in interfaceBodyTag
- 抛出异常:
JspException
- if an error is encountered- 另请参见:
IterationTag.doAfterBody()
doAfterBody
public int doAfterBody() throws JspException
Perform any processing necessary to handle the content implications of CASE 4 in the class description.
Return result from
getDoAfterBodyValue()
- 规范说明:
doAfterBody
in interfaceIterationTag
- 返回:
- whether additional evaluations of the body are desired
- 抛出异常:
JspException
- if an error is encountered
setId
public void setId(String id)
Set the component identifier for our component. If the argument begins with
UIViewRoot.UNIQUE_ID_PREFIX
throw anIllegalArgumentException
- 规范说明:
setId
in classUIComponentTagBase
- 参数:
id
- The new component identifier. This may not start withUIViewRoot.UNIQUE_ID_PREFIX
.- 抛出异常:
IllegalArgumentException
- if the argument is non-null
and starts withUIViewRoot.UNIQUE_ID_PREFIX
.
getId
protected String getId()
Return the
id
value assigned by the page author.
getFacesJspId
protected String getFacesJspId()
If this method has been called before on this tag's useful lifetime (before
release()
was called), return the previously returned value. Otherwise, ifgetJspId()
returns non-null
, prependUNIQUE_ID_PREFIX
to thejspId
and return the result.
getCreatedComponents
protected List<String> getCreatedComponents()
- Returns the
List
ofUIComponent
ids created or located by nestedUIComponentTag
s while processing the current request.
setJspId
public void setJspId(String id)
Defined on
JspIdConsumer
. This method is called by the container beforedoStartTag()
. The argument is guaranteed to be unique within the page.IMPLEMENTATION NOTE: This method will detect where we are in an include and assign a unique ID for each include in a particular 'logical page'. This allows us to avoid possible duplicate ID situations for included pages that have components without explicit IDs.
- 规范说明:
setJspId
in interfaceJspIdConsumer
- 参数:
id
- the container generated id for this tag, guaranteed to be unique within the page.
getJspId
public String getJspId()
setProperties
protected abstract void setProperties(UIComponent component)
Override properties and attributes of the specified component, if the corresponding properties of this tag handler instance were explicitly set. This method must be called ONLY if the specified
UIComponent
was in fact created during the execution of this tag handler instance, and this call will occur BEFORE theUIComponent
is added to the view.Tag subclasses that want to support additional set properties must ensure that the base class
setProperties()
method is still called. A typical implementation that supports extra propertiesfoo
andbar
would look something like this:protected void setProperties(UIComponent component) { super.setProperties(component); if (foo != null) { component.setAttribute("foo", foo); } if (bar != null) { component.setAttribute("bar", bar); } }
The default implementation overrides the following properties:
rendered
- Set if a value for therendered
property is specified for this tag handler instance.rendererType
- Set if thegetRendererType()
method returns a non-null value.
- 参数:
component
-UIComponent
whose properties are to be overridden
createComponent
protected abstract UIComponent createComponent(FacesContext context, String newId) throws JspException
Create and return a new child component of the type returned by calling
getComponentType()
. If thisUIComponentTag
has a non-nullbinding
attribute, this is done by callApplication.createComponent(java.lang.String)
with the expression created for thebinding
attribute, and the expression will be stored on the component. Otherwise,Application.createComponent(java.lang.String)
is called with only the component type. Finally, initialize the components id and other properties.- 参数:
context
-FacesContext
for the current requestnewId
- id of the component- 抛出异常:
JspException
hasBinding
protected abstract boolean hasBinding()
Return
true
if this component has a non-null
binding attribute. This method is necessary to allow subclasses that expose thebinding
property as an Faces 1.1 style EL property as well as subclasses that expose it as an EL API property.
getComponentInstance
public UIComponent getComponentInstance()
Return the
UIComponent
instance that is associated with this tag instance. This method is designed to be used by tags nested within this tag, and only returns useful results between the execution ofdoStartTag()
anddoEndTag()
on this tag instance.- 规范说明:
getComponentInstance
in classUIComponentTagBase
getCreated
public boolean getCreated()
Return
true
if we dynamically created a new component instance during execution of this tag. This method is designed to be used by tags nested within this tag, and only returns useful results between the execution ofdoStartTag()
anddoEndTag()
on this tag instance.- 规范说明:
getCreated
in classUIComponentTagBase
getFacesContext
protected FacesContext getFacesContext()
- Description copied from class:
UIComponentTagBase
Return the
FacesContext
instance for the current request. This value will be non-null
only from the beginning ofdoStartTag()
through the end ofdoEndTag()
for each tag instance.- 规范说明:
getFacesContext
in classUIComponentTagBase
getFacetName
protected String getFacetName()
Return the facet name that we should be stored under, if any; otherwise, return null (indicating that we will be a child component).
|
Java EE 5 SDK 深圳电信培训中心.徐海蛟老师. |
||||||||
上一个类 下一个类 | 框架 无框架 | ||||||||
摘要: 嵌套 | 字段 | 构造器 | 方法 | 详细信息: 字段 | 构造器 | 方法 |
提交错误或意见
版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。深圳电信培训中心.徐海蛟老师教学参考.