## HTML_BASIC render-kit
component-family: javax.faces.OutcomeTarget renderer-type: javax.faces.Button

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`. 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.

- Next, 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`.

- 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 passed through 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 = ''". If the developer has specified a custom onlclick the window.location.href name/value pair will be appended at the end of the developer specified script. If the "fragment" attribute is specified, the value will be included at the end of the resulting URL preceded by a hash mark. If the "styleClass" attribute is specified, render its value as the value of the "class" attribute. If the "id" attribute is specified, follow the same steps as mentioned in the "General Notes on Encoding" regarding the "id" attribute for UIInput components. If the "disabled" attribute is specified, do not render the "onclick" element and assign the "disabled" attribute a value of true.

This renderer is responsible for rendering its children.

### Note:

Attributes with a `pass-through` value of `true` are not interpreted by the renderer and are passed straight through to the rendered markup, without checking for validity. Attributes with a `pass-through` value of `false` are interpreted by the renderer, and may or may not be checked for validity by the renderer.

Attributes
attribute-name | pass-through | 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). | 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 |
`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 |

Copyright (c) 2003-2010 Oracle America, Inc. All Rights Reserved.