Package org.omnifaces.component.input
Class ScriptParam
-
- All Implemented Interfaces:
EditableValueHolder
,PartialStateHolder
,StateHolder
,TransientStateHolder
,ValueHolder
,ComponentSystemEventListener
,FacesListener
,SystemEventListenerHolder
,EventListener
public class ScriptParam extends OnloadParam
The
<o:scriptParam>
is a component that extends the standard<f:viewParam>
with support for setting results of client-side evaluated JavaScript code in bean.Usage
It's similar to the
<f:viewParam>
.<f:metadata> <o:scriptParam script="new Date().getTimezoneOffset()" value="#{bean.clientTimeZoneOffset}" /> <o:scriptParam script="window.screen.width" value="#{bean.clientScreenWidth}" /> <o:scriptParam script="someFunctionName()" value="#{bean.resultOfSomeFunctionName}" /> </f:metadata>
You can use the
render
attribute to declare which components should be updated when a script parameter has been set.<f:metadata> <o:scriptParam script="foo()" value="#{bean.resultOfFoo}" render="fooResult" /> </f:metadata> ... <h:body> ... <h:panelGroup id="fooResult"> <ui:fragment rendered="#{not empty bean.resultOfFoo}"> The result of foo() script is: #{bean.resultOfFoo} </ui:fragment> </h:panelGroup> ... </h:body>
Note that as it extends from the standard
<f:viewParam>
, its built-in conversion and validation functionality is also supported on this component. So, the following is also possible:<f:metadata> <o:scriptParam script="window.navigator" value="#{bean.clientNavigator}" /> </f:metadata>
With aclientNavigator
being an instance ofjakarta.json.JsonObject
:private JsonObject clientNavigator;
And this converter:package com.example; import java.io.StringReader; import jakarta.faces.component.UIComponent; import jakarta.faces.context.FacesContext; import jakarta.faces.convert.Converter; import jakarta.faces.convert.ConverterException; import jakarta.faces.convert.FacesConverter; import jakarta.json.Json; import jakarta.json.JsonObject; @FacesConverter(forClass = JsonObject.class) public class JsobObjectConverter implements Converter<JsonObject> { @Override public String getAsString(FacesContext context, UIComponent component, JsonObject modelValue) { if (modelValue == null) { return ""; } return modelValue.toString(); } @Override public JsonObject getAsObject(FacesContext context, UIComponent component, String submittedValue) { if (submittedValue == null || submittedValue.isEmpty()) { return null; } try { return Json.createReader(new StringReader(submittedValue)).readObject(); } catch (Exception e) { throw new ConverterException("Not a valid JSON object", e); } } }
Events
When the script params have been set, then any method with the
PostScriptParam
annotation will be fired:@PostScriptParam public void initScriptParams() { // ... }
This is useful in case you want to preload the model for whatever is rendered by
<o:scriptParam render>
.- Since:
- 3.6
- Author:
- Bauke Scholtz
- See Also:
OnloadParam
,PostScriptParam
,Faces.getScriptParameters()
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class jakarta.faces.component.UIViewParameter
UIViewParameter.Reference
-
-
Field Summary
Fields Modifier and Type Field Description static String
COMPONENT_TYPE
The component type, which is "org.omnifaces.component.input.ScriptParam".static String
EVENT_VALUE
The omnifaces event value, which is "setScriptParamValues".-
Fields inherited from class org.omnifaces.component.input.OnloadParam
state
-
Fields inherited from class jakarta.faces.component.UIViewParameter
COMPONENT_FAMILY
-
Fields inherited from class jakarta.faces.component.UIInput
ALWAYS_PERFORM_VALIDATION_WHEN_REQUIRED_IS_TRUE, CONVERSION_MESSAGE_ID, EMPTY_STRING_AS_NULL_PARAM_NAME, REQUIRED_MESSAGE_ID, UPDATE_MESSAGE_ID, VALIDATE_EMPTY_FIELDS_PARAM_NAME
-
Fields inherited from class jakarta.faces.component.UIComponent
ATTRS_WITH_DECLARED_DEFAULT_VALUES, BEANINFO_KEY, bindings, COMPOSITE_COMPONENT_TYPE_KEY, COMPOSITE_FACET_NAME, CURRENT_COMPONENT, CURRENT_COMPOSITE_COMPONENT, FACETS_KEY, HONOR_CURRENT_COMPONENT_ATTRIBUTES_PARAM_NAME, VIEW_LOCATION_KEY
-
-
Constructor Summary
Constructors Constructor Description ScriptParam()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
decodeAll(FacesContext context)
Decode all relevantOnloadParam
components at once.protected String
getEventValue(FacesContext context)
Returns the value of theOmniFaces.OMNIFACES_EVENT_PARAM_NAME
associated with the current component.protected String
getInitScript(FacesContext context)
Returns script which should be executed upon initialization of a new view.String
getScript()
Returns the script to be evaluated.static boolean
isScriptParamRequest(FacesContext context)
Returnstrue
if the current request is triggered by a script param request.void
setScript(String script)
Sets the script to be evaluated.-
Methods inherited from class org.omnifaces.component.input.OnloadParam
decodeImmediately, getRender, getUpdateScript, isOnloadParamRequest, isOnloadParamRequest, processDecodes, processUpdates, processValidators, setRender
-
Methods inherited from class jakarta.faces.component.UIViewParameter
decode, encodeAll, getConvertedValue, getFamily, getName, getStringValue, getStringValueFromModel, getSubmittedValue, isImmediate, setName, setSubmittedValue, updateModel
-
Methods inherited from class jakarta.faces.component.UIInput
addValidator, addValueChangeListener, clearInitialState, compareValues, getConverterMessage, getRequiredMessage, getValidator, getValidatorMessage, getValidators, getValue, getValueChangeListener, getValueChangeListeners, isEmpty, isLocalValueSet, isRequired, isValid, markInitialState, removeValidator, removeValueChangeListener, resetValue, restoreState, saveState, setConverterMessage, setImmediate, setLocalValueSet, setRequired, setRequiredMessage, setValid, setValidator, setValidatorMessage, setValue, setValueChangeListener, validate, validateValue
-
Methods inherited from class jakarta.faces.component.UIOutput
getConverter, getLocalValue, setConverter
-
Methods inherited from class jakarta.faces.component.UIComponentBase
addClientBehavior, addFacesListener, broadcast, encodeBegin, encodeChildren, encodeEnd, findComponent, getAttributes, getChildCount, getChildren, getClientBehaviors, getClientId, getDefaultEventName, getEventNames, getFacesContext, getFacesListeners, getFacet, getFacetCount, getFacets, getFacetsAndChildren, getId, getListenersForEventClass, getParent, getPassThroughAttributes, getRenderer, getRendererType, getRendersChildren, getValueBinding, invokeOnComponent, isRendered, isTransient, processRestoreState, processSaveState, queueEvent, removeFacesListener, restoreAttachedState, saveAttachedState, setId, setParent, setRendered, setRendererType, setTransient, setValueBinding, subscribeToEvent, unsubscribeFromEvent
-
Methods inherited from class jakarta.faces.component.UIComponent
getClientId, getCompositeComponentParent, getContainerClientId, getCurrentComponent, getCurrentCompositeComponent, getNamingContainer, getPassThroughAttributes, getResourceBundleMap, getStateHelper, getStateHelper, getTransientStateHelper, getTransientStateHelper, getValueExpression, initialStateMarked, isCompositeComponent, isInView, isVisitable, popComponentFromEL, processEvent, pushComponentToEL, restoreTransientState, saveTransientState, setInView, setValueExpression, visitTree
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface jakarta.faces.component.ValueHolder
getConverter, getLocalValue, setConverter
-
-
-
-
Field Detail
-
COMPONENT_TYPE
public static final String COMPONENT_TYPE
The component type, which is "org.omnifaces.component.input.ScriptParam".- See Also:
- Constant Field Values
-
EVENT_VALUE
public static final String EVENT_VALUE
The omnifaces event value, which is "setScriptParamValues".- See Also:
- Constant Field Values
-
-
Method Detail
-
getInitScript
protected String getInitScript(FacesContext context)
Description copied from class:OnloadParam
Returns script which should be executed upon initialization of a new view.- Overrides:
getInitScript
in classOnloadParam
- Parameters:
context
- The involved faces context.- Returns:
- Script which should be executed upon initialization of a new view.
-
getEventValue
protected String getEventValue(FacesContext context)
Description copied from class:OnloadParam
Returns the value of theOmniFaces.OMNIFACES_EVENT_PARAM_NAME
associated with the current component.- Specified by:
getEventValue
in classOnloadParam
- Parameters:
context
- The involved faces context.- Returns:
- The value of the
OmniFaces.OMNIFACES_EVENT_PARAM_NAME
associated with the current component.
-
decodeAll
protected void decodeAll(FacesContext context)
Description copied from class:OnloadParam
Decode all relevantOnloadParam
components at once.- Specified by:
decodeAll
in classOnloadParam
- Parameters:
context
- The involved faces context.
-
getScript
public String getScript()
Returns the script to be evaluated.- Returns:
- The script to be evaluated.
-
setScript
public void setScript(String script)
Sets the script to be evaluated.- Parameters:
script
- The script to be evaluated.
-
isScriptParamRequest
public static boolean isScriptParamRequest(FacesContext context)
Returnstrue
if the current request is triggered by a script param request. I.e. if it is initiated byOmniFaces.ScriptParam.setScriptParamValues()
script which runs on page load.- Parameters:
context
- The involved faces context.- Returns:
true
if the current request is triggered by a script param request.
-
-