【问题标题】:Passing value from controller to html in spring在春天将值从控制器传递到html
【发布时间】:2019-07-11 14:18:51
【问题描述】:

您好,我有一个简单的网页,其中有一个按钮和一个靠近按钮的文本。我需要在单击按钮时更改文本并从代码中获取新文本。

这是我需要传递响应的控制器类:

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

这里是我的 html 页面,来自控制器的值必须不是问号:

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

提前感谢您的帮助。

编辑: 我试过 ${stream} 但将其作为文本而不是值,请看截图:

编辑 2: 我需要将字符串从文本区域传递给控制器​​中的 doc 变量。请帮忙。

HTML:

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

控制器:

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

    service.sendDoc(doc);

    return "mainpage";
}

【问题讨论】:

  • &lt;p align="center"&gt;${stream}&lt;/p&gt;

标签: java spring spring-boot spring-mvc thymeleaf


【解决方案1】:

改变

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

到

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

它是如何工作的?

您可以通过 ${key} 访问变量值。

例子

model.addAttribute("key", value);   

在 HTML 中通过${key} 获取值

在 Thymeleaf 中,这些模型属性(或上下文变量) Thymeleaf 术语)可以使用以下语法访问: ${attributeName},在我们的例子中,attributeName 是stream。这个 是一个 Spring EL 表达式。简而言之,Spring EL(Spring 表达式 Language) 是一种支持查询和操作 运行时的对象图。

更新

th:field 属性可用于输入、选择或文本区域。

将&lt;p align="center"&gt;?????&lt;/p&gt; 替换为

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

或

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

或

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

也可以试试&lt;p th:inline="text"&gt;[[${stream}]]&lt;/p&gt;; &lt;p data-th-text="${stream}"/>

Thymeleaf DocumentThymeleaf Document Inputs


更新 2

从 Thymeleaf 获取价值到 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";
    }

注意:实体/模型使用“th:field”

【讨论】:

  • 感谢您的评论。我已编辑问题,请参阅。
  • 你好,是的,我试过了。

    在这个变体中什么也没有出现。
  • @SamirAmanov 请确保你的控制器被调用并且你得到一个字符串响应
  • 感谢您的帮助。下面显示的行有帮助:

    [[${stream}]]

  • 你好@SamirAmanov,我已经更新了我的答案,请参考update2。我已经在我的机器上测试过了,它工作正常
【解决方案2】:

感谢您的帮助。下面显示的行有帮助:

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

【讨论】:

    【解决方案3】:

    试试这些:&lt;p align="center"&gt;${stream}&lt;/p&gt; 或 &lt;p th:text="${stream}"&gt;&lt;/p&gt;

    这个标签可能会导致问题:

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

    请通过删除它来检查它。

    【讨论】:

    • 感谢您的评论。我已编辑问题,请参阅。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 2012-04-18
    相关资源
    最近更新 更多