Samir Amanov
Samir Amanov

Reputation: 169

Passing value from controller to html in spring

Hello I have a simple web page where I have a button and a text near to button. I need to change text when button clicked and get the new text from code.

This is controller class from where I need to pass response:

@GetMapping("/stream")
    public String openStream(Model model) { 
        String response = service.openStream();
        model.addAttribute("stream", response);     
        return "mainpage";
    }

And here my html page, the value from controller must be instead of question marks:

<div id="container">
  <button class="button"
        onclick="window.location.href = '/stream';">Stream</button>
  <p align="center">?????</p>
</div>

Thanks in advance for your help.

Edit: I tried ${stream} but getting it as text not value, please see screenshot: enter image description here

Edit 2: I need pass String from the text area to doc variable in the controller. Please help.

HTML:

<div>
<textarea rows="10" cols="100" name="description"></textarea>
button class="button" onclick="window.location.href ='/send';">Send</button>
</div>

Controller:

@GetMapping("/send")
public String send(String doc) {

    service.sendDoc(doc);

    return "mainpage";
}

Upvotes: 5

Views: 20810

Answers (4)

Vladi
Vladi

Reputation: 1990

So i solve it like that :

let said i want to pass int ValueIwantToPass=5

in my controller i put

@GetMapping("/tasks")
public String listTasks(Model model) {
    model.addAttribute("value", ValueIwantToPass);
}

and in my HTML file it look

<h1>i wanted to pass [[${value}]]</h1>

Upvotes: 0

Romil Patel
Romil Patel

Reputation: 13737

Change

<p align="center">?????</p>

To

<p align="center">${stream}</p> OR <p th:text="${stream}"></p> 

How it is working?

You can access variables value by ${key}.

Example

model.addAttribute("key", value);   

Get value by ${key} in HTML

In Thymeleaf, these model attributes (or context variables in Thymeleaf jargon) can be accessed with the following syntax: ${attributeName}, where attributeName in our case is stream. This is a Spring EL expression. In short, Spring EL (Spring Expression Language) is a language that supports querying and manipulating an object graph at runtime.

UPDATE

The th:field attribute can be used on input, select, or, textarea.

Replace <p align="center">?????</p> with

<input type="text" id="stream" name="stream" th:value="${stream}" />

OR

<input type="text" th:field="*{stream}" />`

OR

<input type="text" id="stream" name="stream" th:field="*{stream}" th:value="${stream}" />

Also try <p th:inline="text">[[${stream}]]</p>; <p data-th-text="${stream}" />

Thymeleaf Document Thymeleaf Document Inputs


UPDATE 2

Get value from Thymeleaf to Spring Boot

<form th:action="@{/send}" method="get">
   <textarea  th:name="doc" rows="10" cols="100" name="doc"></textarea>
   <button type="submit">Send</button>
</form>

    @GetMapping("/send")
    public String send(@RequestParam(name="doc", required = false) String doc) {
        //change required = false as per requirement
        System.out.println("Doc: "+doc);
        return "textarea-input";
    }

Note: use "th:field" for Entity/Model

Upvotes: 8

Samir Amanov
Samir Amanov

Reputation: 169

Thank you for your help. Below shown line helped:

<p th:inline="text">[[${stream}]]</p>

Upvotes: 2

Anish B.
Anish B.

Reputation: 16469

Try these : <p align="center">${stream}</p> or <p th:text="${stream}"></p>

This tag may be causing a problem :

<button class="button"
        onclick="window.location.href = '/stream';">Stream</button>

Please check it by removing this.

Upvotes: 0

Related Questions