Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can we use If Else block in Dynamic Html? (To do: include it in Documentation) #59

Closed
ZinfinityDarshan opened this issue Jul 24, 2020 · 4 comments

Comments

@ZinfinityDarshan
Copy link

I am using HTML Flow in our project at Zinfinity, can you please tell me if we can use If Else block in HTML ?

@fmcarvalho
Copy link
Member

Certainly you can. HtmlFlow is unopinionated and provides you several ways of doing it. Btw you can do it both in Dynamic and Static HTML.

You may find many examples of different kinds of use in Pet Clinic sample application in org/springframework/samples/petclinic/views folder here: https://github.com/xmlet/spring-petclinic/tree/master/src/main/java/org/springframework/samples/petclinic/views

For instance, in CreateOrUpdateOwnerForm.java you have a submit button , which contains the label Add Owner or Update Owner depending on whether the view is returned from the /owners/new or /owners/ownerId/edit path. To that end, you may find the following snippet in line 33:

.button().attrClass("btn btn-default").attrType(EnumTypeButtonType.SUBMIT)
    .dynamic(bt -> {
        if(owner == null) bt.text("Add Owner");
        else bt.text("Update Owner");
    })
.__() //button

Simply put, dynamic(elem -> ...) or of(elem -> ...) let you chain any control flow logic with the last created element passed to the lambda. In the previous example the element it is the button bt.

The main difference between of() and dynamic() is that the former will keep the resulting HTML in cache and only evaluates the condition on first resolution/rendering. Whenever your condition depends of dynamic data, like a data model, then you should use dynamic().

I hope it helps.

@volgin
Copy link

volgin commented Nov 12, 2021

This should be added to the documentation. I had to look through many issues before I found this answer.

@fmcarvalho
Copy link
Member

Thanks @volgin your feedback is important.

Unfortunately I am overwhelmed and planning to enhance documentation for more than on year. But I did not have time yet.

I have a lot of information spread on different articles, issues, README, wiki...

I will reopen this Issue to remember that I should include some patterns and idioms in HtmlFlow documentation.

BTW this paper https://gamboa.pt/img/my-papers/lnbip2020-unopinionated-templates.pdf put side by side some templating idioms between Thymeleaf and HtmlFlow. Maybe it could give a help in other issues.

@fmcarvalho fmcarvalho reopened this Nov 12, 2021
@fmcarvalho fmcarvalho changed the title Can we use If Else block in Dynamic Html, if yes how to use it Can we use If Else block in Dynamic Html? (To do: include it in Documentation) Nov 12, 2021
@fmcarvalho
Copy link
Member

I included the most common use cases for data binding, if/else, and loops usage, in GitHub README.

Also in https://htmlflow.org/features I have included the same examples implemented with both approaches: HtmlDoc and HtmlView

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants