Class ElementBuilderFactory
- Direct Known Subclasses:
DomBuilderFactory
,HtmlBuilderFactory
Use get()
to fetch the builder factory
optimized for the browser platform.
If you are using the builder on a server, use
HtmlBuilderFactory.get()
instead. HtmlBuilderFactory
can
construct a SafeHtml
string and will
work on the server. Other implementations may only work on a browser client.
Element builder methods can be chained together as with a traditional builder:
DivBuilder divBuilder = ElementBuilderFactory.get().createDivBuilder(); divBuilder.id("myId").text("Hello World!").endDiv();
See this example:
.public class ElementBuilderFactoryChainingExample implements EntryPoint { @Override public void onModuleLoad() { /* * Create a builder for the outermost element. The initial state of the * builder is a started element ready for attributes (eg. "<div"). */ DivBuilder divBuilder = ElementBuilderFactory.get().createDivBuilder(); /* * Build the element. * * First, we set the element's id to "myId", then set its title to * "This is a div". Next, we set the background-color style property to * "red". Finally, we set some inner text to "Hello World!". When we are * finished, we end the div. * * When building elements, the order of methods matters. Attributes and * style properties must be added before setting inner html/text or * appending children. This is because the string implementation cannot * concatenate an attribute after child content has been added. * * Note that endStyle() takes the builder type that we want to return, which * must be the "parent" builder. endDiv() does not need the optional * argument because we are finished building the element. */ divBuilder.id("myId").title("This is a div"); divBuilder.style().trustedBackgroundColor("red").endStyle(); divBuilder.text("Hello World!").endDiv(); // Get the element out of the builder. Element div = divBuilder.finish(); // Attach the element to the page. Document.get().getBody().appendChild(div); } }
Alternatively, builders can be used as separate objects and operated on individually. This may be the preferred method if you are creating a complex or dynamic element. The code below produces the same output as the code above.
DivBuilder divBuilder = ElementBuilderFactory.get().createDivBuilder(); divBuilder.id("myId"); divBuilder.text("Hello World!"); divBuilder.endDiv();
See an example:
.public class ElementBuilderFactoryNonChainingExample implements EntryPoint { @Override public void onModuleLoad() { /* * Create a builder for the outermost element. The initial state of the * builder is a started element ready for attributes (eg. "<div"). */ DivBuilder divBuilder = ElementBuilderFactory.get().createDivBuilder(); // Add attributes to the div. divBuilder.id("myId"); divBuilder.title("This is a div"); // Add style properties to the div. StylesBuilder divStyle = divBuilder.style(); divStyle.trustedBackgroundColor("red"); divStyle.endStyle(); // Append a child select element to the div. SelectBuilder selectBuilder = divBuilder.startSelect(); // Append three options to the select element. for (int i = 0; i < 3; i++) { OptionBuilder optionBuilder = selectBuilder.startOption(); optionBuilder.value("value" + i); optionBuilder.text("Option " + i); optionBuilder.endOption(); } /* * End the select and div elements. Note that ending the remaining elements * before calling asElement() below is optional, but a good practice. If we * did not call endOption() above, we would append each option element to * the preceding option element, which is not what we want. * * In general, you must pay close attention to ensure that you close * elements correctly. */ selectBuilder.endSelect(); divBuilder.endDiv(); // Get the element out of the builder. Element div = divBuilder.finish(); // Attach the element to the page. Document.get().getBody().appendChild(div); } }
You can also mix chaining and non-chaining methods when appropriate. For example, you can add attributes to an element by chaining methods, but use a separate builder object for each separate element.
NOTE: Builders always operate on the current element. For example, in the
code below, we create two divBuilders, one a child of the other. However,
they are actually the same builder instance! Implementations of
ElementBuilderFactory use a single instance of each builder type to improve
performance. The implication is that all element builders operate on the
current element, so the call to divBuilder0.id("div1")
will set
the "id" of the child div, and is functionally equivalent to
divBuilder1.id("div1")
. Its important to always call end()
before resuming work on the previous element builder.
DivBuilder divBuilder0 = ElementBuilderFactory.get().createDivBuilder(); DivBuilder divBuilder1 = divBuilder0.startDiv(); divBuilder0.id("div1"); // Operates on the first element!
-
Constructor Summary
ModifierConstructorDescriptionprotected
Created from static factory method. -
Method Summary
Modifier and TypeMethodDescriptionabstract AnchorBuilder
abstract AreaBuilder
abstract AudioBuilder
abstract BaseBuilder
abstract QuoteBuilder
abstract BodyBuilder
abstract BRBuilder
abstract InputBuilder
abstract CanvasBuilder
abstract InputBuilder
abstract TableColBuilder
abstract TableColBuilder
abstract DivBuilder
abstract DListBuilder
abstract FieldSetBuilder
abstract InputBuilder
abstract FormBuilder
abstract FrameBuilder
abstract FrameSetBuilder
abstract HeadingBuilder
abstract HeadingBuilder
abstract HeadingBuilder
abstract HeadingBuilder
abstract HeadingBuilder
abstract HeadingBuilder
abstract HeadBuilder
abstract InputBuilder
abstract HRBuilder
abstract IFrameBuilder
abstract ImageBuilder
abstract InputBuilder
abstract LabelBuilder
abstract LegendBuilder
abstract LIBuilder
abstract LinkBuilder
abstract MapBuilder
abstract MetaBuilder
abstract OListBuilder
abstract OptGroupBuilder
abstract OptionBuilder
abstract ParagraphBuilder
abstract ParamBuilder
abstract InputBuilder
abstract PreBuilder
abstract ButtonBuilder
abstract QuoteBuilder
abstract InputBuilder
Create a builder for an <input type='radio'> element.abstract ButtonBuilder
abstract InputBuilder
abstract ScriptBuilder
abstract SelectBuilder
abstract SourceBuilder
abstract SpanBuilder
abstract StyleBuilder
abstract ButtonBuilder
abstract InputBuilder
abstract TableBuilder
abstract TableCaptionBuilder
abstract TableSectionBuilder
abstract TableCellBuilder
abstract TextAreaBuilder
abstract InputBuilder
abstract TableSectionBuilder
abstract TableCellBuilder
abstract TableSectionBuilder
abstract TableRowBuilder
abstract UListBuilder
abstract VideoBuilder
static ElementBuilderFactory
get()
Get the instance of theElementBuilderFactory
.abstract ElementBuilder
trustedCreate
(String tagName) Create anElementBuilder
for an arbitrary tag name.
-
Constructor Details
-
ElementBuilderFactory
protected ElementBuilderFactory()Created from static factory method.
-
-
Method Details
-
get
Get the instance of theElementBuilderFactory
.- Returns:
- the
ElementBuilderFactory
-
createAnchorBuilder
-
createAreaBuilder
-
createAudioBuilder
-
createBaseBuilder
-
createBlockQuoteBuilder
-
createBodyBuilder
-
createBRBuilder
-
createButtonInputBuilder
-
createCanvasBuilder
-
createCheckboxInputBuilder
-
createColBuilder
-
createColGroupBuilder
-
createDivBuilder
-
createDListBuilder
-
createFieldSetBuilder
-
createFileInputBuilder
-
createFormBuilder
-
createFrameBuilder
-
createFrameSetBuilder
-
createH1Builder
-
createH2Builder
-
createH3Builder
-
createH4Builder
-
createH5Builder
-
createH6Builder
-
createHeadBuilder
-
createHiddenInputBuilder
-
createHRBuilder
-
createIFrameBuilder
-
createImageBuilder
-
createImageInputBuilder
-
createLabelBuilder
-
createLegendBuilder
-
createLIBuilder
-
createLinkBuilder
-
createMapBuilder
-
createMetaBuilder
-
createOListBuilder
-
createOptGroupBuilder
-
createOptionBuilder
-
createParagraphBuilder
-
createParamBuilder
-
createPasswordInputBuilder
-
createPreBuilder
-
createPushButtonBuilder
-
createQuoteBuilder
-
createRadioInputBuilder
Create a builder for an <input type='radio'> element.- Parameters:
name
- name the name of the radio input (used for grouping)- Returns:
- the builder for the new element
-
createResetButtonBuilder
-
createResetInputBuilder
-
createScriptBuilder
-
createSelectBuilder
-
createSourceBuilder
-
createSpanBuilder
-
createStyleBuilder
-
createSubmitButtonBuilder
-
createSubmitInputBuilder
-
createTableBuilder
-
createTableCaptionBuilder
-
createTBodyBuilder
-
createTDBuilder
-
createTextAreaBuilder
-
createTextInputBuilder
-
createTFootBuilder
-
createTHBuilder
-
createTHeadBuilder
-
createTRBuilder
-
createUListBuilder
-
createVideoBuilder
-
trustedCreate
Create anElementBuilder
for an arbitrary tag name. The tag name will will not be checked or escaped. The calling code should be carefully reviewed to ensure that the provided tag name will not cause a security issue if including in an HTML document. In general, this means limiting the code to HTML tagName constants supported by the HTML specification.- Parameters:
tagName
- the tag name of the new element- Returns:
- an
ElementBuilder
used to build the element
-