Creating a UI with Mateu is as easy as creating a java class and annotating it with @MateuUI.

Here you have an example:


package com.example.demo;

import io.mateu.core.domain.uidefinition.shared.annotations.MateuUI;

@MateuUI("")
public class HelloWorld {

}

The code above produces the following UI, when you run the microservice and navigate to http://localhost:8080 (or in any port your server listens to):

The @MateuUI anotation

The @MateuUI annotation expects just 1 parameter, which is used to know at which url you want the UI to be found at.

So, the following code:

@MateuUI("")
public class HelloWorld {

}

will show the UI if you navigate to hhtp://localhost:8080 while, on the other hand, the following code:

@MateuUI("/hello")
public class HelloWorld {

}

will show the UI if you navigate to hhtp://localhost:8080/hello.

Restrictions on paths

You can create as many UIs as you want, in your project. You only need to be careful that the context path needs to be unique. More specific paths are allowed, though.

Favicon

Another thing you can do on your @MateuUI annotated class is provide a favicon. You can do that in a declarative or imperative way.

Declaratively provide Favicon

Just annotate your class with @Favicon, as in the example below:

@MateuUI("/hello")
@Favicon("/favicon.png")
public class HelloWorld {

}

Please notice that you can serve static content from your microservice. For springboot, e.g., you just need to place it in your resources/static folder.

Imperatively provide favicon

If you want to supply your favicon in a more dynamic way, you can just implement the HasFavicon interface as in the example below:

@MateuUI("/hello")
public class HelloWorld implements HasFavicon {

  @Override
  String getFavicon() {
    return "/favicon.png";
  }
  
}

Page title

Another thing you can do on your @MateuUI annotated class is provide a form title. Again, you can do that in a declarative or imperative way.

If you do not provide it, Mateu will infer it from the class name so, a UI created from a class like class HelloWorld {} would have a title like Hello World by default.

Declaratively provide form title

Just annotate your class with @PageTitle, as in the example below:

@MateuUI("/hello")
@PageTtle("Hello World")
public class HelloWorld {

}

Imperatively provide form title

If you want to supply your form title in a more dynamic way, you can just implement the HasPageTitle interface as in the example below:

@MateuUI("/hello")
public class HelloWorld implements HasPageTitle {

  @Override
  String getPageTitle() {
    return "Hello World";
  }
  
}

Fluent style dynamic UIs

If you want to declare your UI using a fluent style code you can do so by implementing the UISupplier interface, like in the example below:


@MateuUI("/fluent")
public class FluentUI implements UISupplier {
  @Override
  public UI getUI(HttpRequest httpRequest) {
    return UI.builder()
      .pageTitle("Fluent UI")
      .homeRoute("/fluent-app")
      .build();
  }
}