Render an HTML "a" anchor element that acts like a form submit button when clicked.
General Behaviour
Both the encode and decode behavior require the ability to get the id/name for a hidden field, which may be rendered in markup or which may be programmatically added via client DOM manipulation, whose value is set by the JavaScript form submit. This name must be constructed as follows:
Get the clientId for the form of which this component is a child.
Append
NamingContainer.SEPARATOR_CHAR
.
Append a constant string that is the same for all command link components in the tree.
In the following text, this String is called hiddenFieldName.
Decode Behavior
Obtain the "clientId" property of the component. Obtain the
Map
from the "requestParameterMap" property
of the
ExternalContext
. Derive hiddenFieldName as
above.
Get the entry in the Map
under the key that
is the
hiddenFieldName. If the there is no entry, or the entry is the
empty String, or the entry is not equal to the value of the
"clientId" property, return immediately. If there is an entry,
and its value is equal to the value of the "clientId" property,
create a new javax.faces.event.ActionEvent
instance
around the component and call queueActionEvent()
on
the component, passing the event.
Encode Behavior
If the value of the disabled
attribute is
true
, render a span element. Render all the
passthru
attributes and the target
attribute as
pass-through
attributes on the span, even though the target
attribute will have no effect on a span. Render the current value
of the component as the content of the span. Return.
If the disabled
attribute is not
present, or its
value is false
, render an HTML a
element. Render "#" as the value of the "href" attribute. Render
the current value of the component as the link text if it is
specified. Render JavaScript that is functionally equivalent to
the following as the value of the "onclick" attribute:
document.forms['CLIENT_ID']['hiddenFieldName'].value='CLIENT_ID';
document.forms['CLIENT_ID']['PARAM1_NAME'].value='PARAM1_VALUE';
document.forms['CLIENT_ID']['PARAM2_NAME'].value='PARAM2_VALUE';
return false;
document.forms['CLIENT_ID'].submit()" where hiddenFieldName is as described above, CLIENT_ID is the clientId of the UICommand component, PARAM*_NAME and PARAM*_VALUE are the names and values, respectively, of any nested UIParameter children. The name and the value must be URLEncoded. If an "onclick" attribute was specified by the user, render this JavaScript in a function, and render the user's JavaScript in a function. Render both functions in a choice function as follows:
var a=function(){#USER_FUNCTION#};
var b=function(){#JSF_FUNCTION#};
return (a()==false) ? false : b();
where #USER_FUNCTION# is the user's JavaScript and #JSF_FUNCTION# is the JavaScript rendered by JSF. The choice function should operate such that if the user's JavaScript returns true, then the rendered JavaScript will also execute.
If the "styleClass" attribute is specified, render its value as the value of the "class" attribute. Render any non-UIParameter output children as normal inside of the "a" element. These will appear as the link text. Allow the form renderer to output a single "input" element (for the entire page, regardless of how many command link components are in the page) of "type" "hidden" whose "name" is the value of hiddenFieldName, and which must not have a "value" attribute. Multiple occurrences of command link components in the tree should not cause multiple hiddenFieldName hidden fields. Allow the form renderer to output an "input" element of "type" "hidden" for each of the nested UIParameter children, taking the name property (but not the value) from each one in turn. If the "disabled" attribute is specified, do not render the HTML "a" anchor element or its "href" attribute. Instead, render a "span" element. If the "styleClass" attribute is specified, render its value as the value of the "class" attribute on the "span". Render any pass-through attributes on the "span". The content of the span element comes from the value of the component or its children as specified above.
If the user specified a target
attribute, its
value must be set using javascript since the onclick
handler will prevent the target attribute from being generated.
This must be accomplished using JavaScript that is equivalent to
the following.
document.forms['CLIENT_ID'].target='TARGET';
Where TARGET is the value of the target attribute on the JSP tag.
Info | Value |
---|---|
Component Type | javax.faces.HtmlCommandLink |
Handler Class | None |
Renderer Type | javax.faces.Link |
Description | None |
Name | Required | Type | Description |
---|---|---|---|
role | false | javax.el.ValueExpression
(must evaluate to 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. |
action | false | javax.el.MethodExpression
(signature must match java.lang.Object action() )
| MethodExpression representing the application action to invoke when this component is activated by the user. The expression must evaluate to a public method that takes no parameters, and returns an Object (the toString() of which is called to derive the logical outcome) which is passed to the NavigationHandler for this application. |
actionListener | false | javax.el.MethodExpression
(signature must match void actionListener(javax.faces.event.ActionEvent)
)
|
MethodExpression representing an action listener method that will be notified when this component is activated by the user. The expression must evaluate to a public method that takes an ActionEvent parameter, with a return type of void, or to a public method that takes no arguments with a return type of void. In the latter case, the method has no way of easily knowing where the event came from, but this can be useful in cases where a notification is needed that "some action happened". |
id | false | javax.el.ValueExpression
(must evaluate to java.lang.String )
| The component identifier for this component. This value must be unique within the closest parent component that is a naming container. |
immediate | false | javax.el.ValueExpression
(must evaluate to java.lang.Boolean )
| Flag indicating that, if this component is activated by the user, notifications should be delivered to interested listeners and actions immediately (that is, during Apply Request Values phase) rather than waiting until Invoke Application phase. |
rendered | false | javax.el.ValueExpression
(must evaluate to java.lang.Boolean )
| Flag indicating whether or not this component should be rendered (during Render Response Phase), or processed on any subsequent form submit. The default value for this property is true. |
value | false | javax.el.ValueExpression
(must evaluate to java.lang.Object )
| The current value of this component. |
accesskey | false | javax.el.ValueExpression
(must evaluate to java.lang.String )
| Access key that, when pressed, transfers focus to this element. |
charset | false | javax.el.ValueExpression
(must evaluate to java.lang.String )
| The character encoding of the resource designated by this hyperlink. |
coords | false | javax.el.ValueExpression
(must evaluate to java.lang.String )
| The position and shape of the hot spot on the screen (for use in client-side image maps). |
dir | false | javax.el.ValueExpression
(must evaluate to java.lang.String )
| Direction indication for text that does not inherit directionality. Valid values are "LTR" (left-to-right) and "RTL" (right-to-left). |
disabled | false | javax.el.ValueExpression
(must evaluate to java.lang.Boolean )
| Flag indicating that this element must never receive focus or be included in a subsequent submit. |
hreflang | false | javax.el.ValueExpression
(must evaluate to java.lang.String )
| The language code of the resource designated by this hyperlink. |
lang | false | javax.el.ValueExpression
(must evaluate to java.lang.String )
| Code describing the language used in the generated markup for this component. |
onblur | false | javax.el.ValueExpression
(must evaluate to java.lang.String )
| Javascript code executed when this element loses focus. |
onclick | false | javax.el.ValueExpression
(must evaluate to java.lang.String )
| Javascript code executed when a pointer button is clicked over this element. |
ondblclick | false | javax.el.ValueExpression
(must evaluate to java.lang.String )
| Javascript code executed when a pointer button is double clicked over this element. |
onfocus | false | javax.el.ValueExpression
(must evaluate to java.lang.String )
| Javascript code executed when this element receives focus. |
onkeydown | false | javax.el.ValueExpression
(must evaluate to java.lang.String )
| Javascript code executed when a key is pressed down over this element. |
onkeypress | false | javax.el.ValueExpression
(must evaluate to java.lang.String )
| Javascript code executed when a key is pressed and released over this element. |
onkeyup | false | javax.el.ValueExpression
(must evaluate to java.lang.String )
| Javascript code executed when a key is released over this element. |
onmousedown | false | javax.el.ValueExpression
(must evaluate to java.lang.String )
| Javascript code executed when a pointer button is pressed down over this element. |
onmousemove | false | javax.el.ValueExpression
(must evaluate to java.lang.String )
| Javascript code executed when a pointer button is moved within this element. |
onmouseout | false | javax.el.ValueExpression
(must evaluate to java.lang.String )
| Javascript code executed when a pointer button is moved away from this element. |
onmouseover | false | javax.el.ValueExpression
(must evaluate to java.lang.String )
| Javascript code executed when a pointer button is moved onto this element. |
onmouseup | false | javax.el.ValueExpression
(must evaluate to java.lang.String )
| Javascript code executed when a pointer button is released over this element. |
rel | false | javax.el.ValueExpression
(must evaluate to java.lang.String )
| The relationship from the current document to the anchor specified by this hyperlink. The value of this attribute is a space-separated list of link types. |
rev | false | javax.el.ValueExpression
(must evaluate to java.lang.String )
| A reverse link from the anchor specified by this hyperlink to the current document. The value of this attribute is a space-separated list of link types. |
shape | false | javax.el.ValueExpression
(must evaluate to java.lang.String )
| The shape of the hot spot on the screen (for use in client-side image maps). Valid values are: default (entire region); rect (rectangular region); circle (circular region); and poly (polygonal region). |
style | false | javax.el.ValueExpression
(must evaluate to java.lang.String )
| CSS style(s) to be applied when this component is rendered. |
styleClass | false | javax.el.ValueExpression
(must evaluate to 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. |
tabindex | false | javax.el.ValueExpression
(must evaluate to 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. |
target | false | javax.el.ValueExpression
(must evaluate to java.lang.String )
| Name of a frame where the resource retrieved via this hyperlink is to be displayed. |
title | false | javax.el.ValueExpression
(must evaluate to java.lang.String )
| Advisory title information about markup elements generated for this component. |
type | false | javax.el.ValueExpression
(must evaluate to java.lang.String )
| The content type of the resource designated by this hyperlink. |
binding | false | javax.el.ValueExpression
(must evaluate to javax.faces.component.UIComponent )
| The ValueExpression linking this component to a property in a backing bean |