Render a button that does not cause an HTTP POST.
Encode Behavior
Render an HTML "input" element of type "button". The value of the
component is rendered as the button text and the outcome of the
component is used to determine the target URL which is activated by
onclick. If "image" attribute is specified, render it as the value of
the "src" attribute after passing it to the
getResourceURL()
method of the ViewHandler
for
this application, and passing the result through the
encodeResourceURL()
method of the
ExternalContext
.
If the component is not disabled, take the following actions.
Algorithm to obtain the url to which the user-agent should issue a GET request when clicked
Obtain the NavigationCase
that corresponds to the
component instance for this Renderer
.
Obtain an instance of
javax.faces.application.ConfigurableNavigationHandler
from the ViewHandler
. If no such instance can be
obtained, write the "disabled" attribute on the button. Otherwise,
let outcome be the result of calling
getOutcome()
on the argument component, which must be an
instance of UIOutcomeTarget
. If this result is
null
, let outcome be the viewId of the current
UIViewRoot
. Obtain a
reference to the NavigationCase
, called navCase
for discussion. If the component has a non-null
attribute named by the value of the symbolic constant
javax.faces.event.ActionListener.TO_FLOW_DOCUMENT_ID_ATTR_NAME
,
let navCase be the return from calling
getNavigationCase()
on the
ConfigurableNavigationHandler
, passing the current
FacesContext
as the first argument, null
, as
the second argument, outcome as the third argument, and the
value of the TO_FLOW_DOCUMENT_ID_ATTR_NAME
attribute as
the fourth argument. Otherwise, let navCase be the return
from calling getNavigationCase()
on the
ConfigurableNavigationHandler
, passing the current
FacesContext
as the first argument, null
, as
the second argument, and outcome as the third
argument. If this returns null
, log an informative
error which includes the component id, and write the "disabled"
attribute on the component markup, with the value of
true
. Otherwise obtain the encoded target URL using the
following algorithm.
Algorithm to obtain the encoded target URL
Let params be the Map<String,
List<String>>
to be passed to
ViewHandler.getBookmarkableURL()
. Build this map up first
from any child UIParameter
components. These children must
be processed in the order in which they appear as children. If multiple
children with the same name are encountered, their values must appear in
the List<String>
in the Map
entry with
the same name, and appear in the list in the same order as their child
order.
Obtain any parameters included within the
navigation case. Call getParameters()
on
navCase. The result will be a Map<String,
List<String>>
. If the result is
non-null
and non-empty, iterate over the entries
from the result Map
and, if no entry with the
same name exists in params, set the value from the
current entry as the value in the params
Map
.
If the navigation case has a
non-null toFlowDocumentId
property, add two
parameters as shown in this table.
parameter name | parameter value |
---|---|
value of FlowHandler.TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAME |
value of the toFlowDocumentId property
of the navigation case |
value of FlowHandler.FLOW_ID_REQUEST_PARAM_NAME |
value of the fromOutcome property
of the navigation case |
Let includeViewParams be the result of a
logical OR of the results from calling
isIncludeViewParams()
on the argument
UIOutcomeTarget
component and calling
isIncludeViewParams
on navCase.
Call getBookmarkableURL()
on the
ViewHandler
, passing the current
FacesContext
as the first argument, the return
from calling getToViewId()
as the second
argument, params as the third argument, and
includeViewParams as the last argument.
The entire target URL string must be processed by a call to
the encodeResourceURL()
method of the
ExternalContext
. The name of the
UIParameter
goes on the left hand side, and the value of
the UIParameter
on the right hand side. The name and the
value must be URLEncoded. Each UIParameter
instance is
separeted by an ampersand, as dictated in the URL spec. The final
encoded result will be written out to the onclick attribute of the
button as "window.location.href = '
Because this renderer is responsible for rendering its own children, the renderer will decide if the end tag is required or not based on the presence or absence of children for the component.
To support entering flows that are defined by both a defining
document id and a flow id, add a component attribute to this
component whose name is given by the value of the symbolic
constant
javax.faces.event.ActionListener.TO_FLOW_DOCUMENT_ID_ATTR_NAME
,
and whose value is the defining document id. For example, when
using this component in a facelet page, the following markup
would cause such an attribute to be added.
<h:button id="start_a" value="enter flow-a" outcome="flow-a">
<f:attribute name="to-flow-document-id" value="unique"/>
</h:button>
This renderer is responsible for rendering its children.
Attributes with a ignored-by-renderer
value of
true
are not interpreted by the renderer and are conveyed
straight to the rendered markup, without checking for validity. Attributes with a
ignored-by-renderer
value of false
are interpreted
by the renderer, and may or may not be checked for validity by the renderer.
Attributes | |||||
attribute-name | ignored-by-renderer | attribute-class | description | default-value | |
---|---|---|---|---|---|
accesskey
|
true | java.lang.String |
Access key that, when pressed, transfers focus to this element. | undefined | |
alt
|
true | java.lang.String |
Alternate textual description of the element rendered by this component. | undefined | |
dir
|
true | java.lang.String |
Direction indication for text that does not inherit directionality. Valid values are "LTR" (left-to-right) and "RTL" (right-to-left). These attributes are case sensitive when rendering to XHTML, so care must be taken to have the correct case. | undefined | |
disableClientWindow
|
false | java.lang.Boolean |
Disable appending the |
false | |
disabled
|
false | boolean |
Flag indicating that this element must never receive focus or be included in a subsequent submit. A value of false causes no attribute to be rendered, while a value of true causes the attribute to be rendered as disabled="disabled". | undefined | |
fragment
|
false | java.lang.String |
The identifier of the page fragment which should be brought into focus when the target page is rendered. The value of this attribute is appended to the end of target URL following a hash (#) mark. This notation is part of the standard URL syntax. | undefined | |
image
|
false | java.lang.String |
Absolute or relative URL of the image to be displayed for this button. If specified, this "input" element will be of type "image". Otherwise, it will be of the type specified by the "type" property with a label specified by the "value" property. Note that if the value of this attribute starts with "/", the rendered value for this attribute will be prefixed with the context-root for this application. |
undefined | |
lang
|
true | java.lang.String |
Code describing the language used in the generated markup for this component. | undefined | |
onblur
|
true | java.lang.String |
Javascript code executed when this element loses focus. | undefined | |
onclick
|
true | java.lang.String |
Javascript code executed when a pointer button is clicked over this element. | undefined | |
ondblclick
|
true | java.lang.String |
Javascript code executed when a pointer button is double clicked over this element. | undefined | |
onfocus
|
true | java.lang.String |
Javascript code executed when this element receives focus. | undefined | |
onkeydown
|
true | java.lang.String |
Javascript code executed when a key is pressed down over this element. | undefined | |
onkeypress
|
true | java.lang.String |
Javascript code executed when a key is pressed and released over this element. | undefined | |
onkeyup
|
true | java.lang.String |
Javascript code executed when a key is released over this element. | undefined | |
onmousedown
|
true | java.lang.String |
Javascript code executed when a pointer button is pressed down over this element. | undefined | |
onmousemove
|
true | java.lang.String |
Javascript code executed when a pointer button is moved within this element. | undefined | |
onmouseout
|
true | java.lang.String |
Javascript code executed when a pointer button is moved away from this element. | undefined | |
onmouseover
|
true | java.lang.String |
Javascript code executed when a pointer button is moved onto this element. | undefined | |
onmouseup
|
true | java.lang.String |
Javascript code executed when a pointer button is released over this element. | undefined | |
role
|
true | java.lang.String |
Per the WAI-ARIA spec and its relationship to HTML5 (Section title ARIA Role Attriubute), every HTML element may have a "role" attribute whose value must be passed through unmodified on the element on which it is declared in the final rendered markup. The attribute, if specified, must have a value that is a string literal that is, or an EL Expression that evaluates to, a set of space-separated tokens representing the various WAI-ARIA roles that the element belongs to. It is the page author's responsibility to ensure that the user agent is capable of correctly interpreting the value of this attribute. |
undefined | |
style
|
true | java.lang.String |
CSS style(s) to be applied when this component is rendered. | undefined | |
styleClass
|
false | java.lang.String |
Space-separated list of CSS style class(es) to be applied when this element is rendered. This value must be passed through as the "class" attribute on generated markup. | undefined | |
tabindex
|
true | java.lang.String |
Position of this element in the tabbing order for the current document. This value must be an integer between 0 and 32767. | undefined | |
title
|
true | java.lang.String |
Advisory title information about markup elements generated for this component. | undefined |