miercuri, 23 septembrie 2015

[OmniFaces utilities (2.2)] Programmatically create and include a composite component with attributes


[OmniFaces utilities] The includeCompositeComponent() method create and include the composite component of the given library and resource name as child of the given UI component parent, set the given attributes on it and return the created composite component. This has the same effect as using <my:resourceName>. The given component ID must be unique relative to the current naming container parent and is mandatory for functioning of input components inside the composite, if any.

Starting with OmniFaces 2.2, this method was aligned to the new API.

Method:

Usage:

In OmniFaces 2.0, the includeCompositeComponent() method creates and include the composite component of the given library and resource name as child of the given UI component parent and return the created composite component without the possibility to set attributes on the composite component. As you can see here, the attributes are added to the returned composite component via setValueExpression().

Starting with OmniFaces 2.2, a new includeCompositeComponent() is available. This time, we can provide the attributes via a Map<String, Object>, as below:

·         passing attributes as Strings:

import org.omnifaces.util.Components;
...
UIComponent parent = Faces.getViewRoot().findComponent("welcomeId");

Map<String, Object> attributes = new HashMap<>();
attributes.put("value", "Welcome");
attributes.put("to", "Rafael Nadal");

Components.includeCompositeComponent(parent, "customs", "/welcome.xhtml", "welcomeMsgId", attributes);

·         passing attributes as Strings (evaluated value expressions):

import org.omnifaces.util.Components;
import org.omnifaces.util.Faces;
...
UIComponent parent = Faces.getViewRoot().findComponent("welcomeId");
       
Map<String, Object> attributes = new HashMap<>();
attributes.put("value", Components.createValueExpression("#{welcomeBean.value}", java.lang.String.class).getValue(Faces.getELContext()));
attributes.put("to", Components.createValueExpression("#{welcomeBean.to}", java.lang.String.class).getValue(Faces.getELContext()));

Components.includeCompositeComponent(parent, "customs", "/welcome.xhtml", "welcomeMsgId", attributes);

·         passing attributes value expressions:

import org.omnifaces.util.Components;
...
UIComponent parent = Faces.getViewRoot().findComponent("welcomeId");
       
Map<String, Object> attributes = new HashMap<>();
attributes.put("value", Components.createValueExpression("#{welcomeBean.value}", java.lang.String.class));
attributes.put("to", Components.createValueExpression("#{welcomeBean.to}", java.lang.String.class));

Components.includeCompositeComponent(parent, "customs", "/welcome.xhtml", "welcomeMsgId", attributes);

Niciun comentariu:

Trimiteți un comentariu