Expressions
Value insertion - Content
HTML
<p>Counter: <m:text item="counter-value" /></p>
Java
//optional - initial value
@Override
public PageAttributes setupAttributes(ServerRequest request, SecurityContext securityContext) {
return new PageAttributes().with("counter-value", 0);
}
//value can change upon any event
public DOMChanges anyEvent() {
//...
return DOMChanges.of("counter-value", 3);
}
Through the use of the <m:text> tag, values can be inserted anywhere. This includes the body, the title of the page or as a parameter of a tag. Initial value comes from the setupAttributes()
per request and can also be changed in any event as a DOMChange.
Dynamic title
HTML
<title m:item="title"></title>
Java
//initial value
@Override
public PageAttributes setupAttributes(ServerRequest request, SecurityContext securityContext) {
return new PageAttributes().with("title", "Hello world");
}
//title can change upon any event
public DOMChanges anyEvent() {
return DOMChanges.of("title", "Hello new title");
}
Click event - m:click
HTML
<button m:click="increaseCounter(1, 'ABC')">Increase counter</button>
Java
public DOMChanges increaseCounter(int parameter, String otherParam) {
//...
return of("counter-value", counter);
}
or
public void increaseCounter(int parameter) {
//...
}
Executes an event function when clicking the element. Method on the Java side can return DOMChanges or be void.
Change event - m:change
HTML
<input m:change="search(this.value)"/>
Java
public DOMChanges search(String value) {
//...
return of("search-result", lookupResult);
}
or
public void search(String value) {
//...
}
Executes an event function when the value of an <input>
, <select>
, or<textarea>
element has been changed. The event also applies to elements withcontenteditable
enabled, and to any element whendesignMode
is turned on.
On enter event - m-onenter
HTML
<input m:onenter="search(this.value)" type="text" />
Java
public DOMChanges search(String value) {
//...
return of("search-result", lookupResult);
}
or
public void search(String value) {
//...
}
Event that gets executed whenever the enter
key is pressed with this element in focus.
Iterations
HTML
<m:foreach collection="orders" eachName="order">
<p>
Product: <m:text item="order.productName"/>
<button m:click="cancelOrder(order.id)">Remove</button>
</p>
</m:foreach>
Java
//optional - initial value
@Override
public PageAttributes setupAttributes(ServerRequest request, SecurityContext securityContext) {
return new PageAttributes().with("orders", new ArrayList<Order>());
}
//value can change upon any event
public DOMChanges anyEvent() {
//...
return DOMChanges.of("orders", Arrays.asList(new Order(1)));
}
Can iterate with a foreach over a variable that is a collection of elements. Optionally, you can add an eachName
, which gives you access to an additional variable within the iteration under that name, containing the current iteration value.
Conditionals
HTML
<m:if item="counter-value" gt="5">
<p>Counter is above 5</p>
<m:elseif item="counter-value" gt="2">
<p>Counter is above 2</p>
</m:elseif>
<m:else>
<p>Counter is below 2 and 5</p>
</m:else>
</m:if>
You can use an if structure as a dynamic conditional through the use of the<m:if condition="x" ...]</m:if>
tag. Also allows for m:elseif
and m:else
.
Possible conditions are:
eq="5"
- true if equals to the conditionnot="5"
- true if not equals to the conditiongt="5"
- true if greater than but not equals to the conditionlt="5"
- true if less than but not equals to the conditiongte="5"
- true if greater than or equals to the conditionlte="5"
- true if less than or equals to the condition
Conditionally add class
HTML
<div class="red" m:class-append="dynamic-class"></div>
Conditionally add a class by using an inline if expression in m:class-append
. In the above example, if dynamic-class is the value blue
, the div will have class="red blue"
.
Conditionally hide an element
HTML
<button m:click='order()' type="button" m:hide="some-variable">Order</button>
You can show or hide an element based on a value or expression by using m:hide
.
Conditionally disable an element
HTML
<button m:click="clear()" m:disabled="some-variable">Clear</button>
You can disable an element conditionally by using a value or expression in m:disabled
.
Last updated