Spring-Thymeleaf 如何使用 EL 从 Bean 调用操作方法
Spring-Thymeleaf How to invoke with EL an action method from a Bean
我正在使用 Spring/SpringMVC 5.x 版本,在 Tomcat 服务器上使用 Thymeleaf 和 Bootstrap。
我需要问一些你可能觉得很“st@pid”的问题。
在我的 html 视图中,我有以下按钮或 link:
<input type="button" .../>
<a .../>
我不需要提交任何东西,所以我只使用一个简单的按钮,所以我认为我不需要任何表格(除非我需要这个)。
在这个 html 视图中(因为我在 html 标签中添加了 thymeleaf 库),我需要以某种方式添加,
(但我不知道如何),到此按钮或 link,Spring EL 或 Thymeleaf EL 的表达式,因此我可以从
Spring bean,我通过我在控制器中添加的模型在视图中传递,例如:
${myBean.doSomething()
// or
${myBean.doSomething(parameters)
如果这不能理解,我可以用一些代码更新我的问题(我相信 Spring 开发人员
明白我在说什么)。
我不知道如何传递这个表达式。使用什么按钮属性或 link 标签?
我为按钮使用了“action”属性:
<input type="button" th:action="${myBean.doSomething()".../>
或 link 标签中的“href”属性:
<a th:href= "${myBean.getStringUrlAndDoSomething()"/>
非常重要的信息
当我启动 tomcat 运行 页面时,EL 中的操作在页面加载时 运行 成功。当我按下按钮或 link 时没有任何反应。
我知道我不能使用“onclick”属性,因为我们在那里写JS代码。
但是我需要运行JavaSpring代码。
关于解决我的问题有什么想法吗?
提前致谢
我听从了@M.Deinum、@Wim Deblauwe 的建议,但我没有使用
这项工作的按钮。按钮需要一个表单才能工作。
这就是我使用 link 的原因,其中来自 bean 的方法被称为魅力,例如
以下片段:
<div class="blabla">
<div class="blablabla" th:text="|#{change_lang} EN/GR:|"></div>
<a class="bla" th:href="${localeService.switchLocale()}">
<div th:class="|${localeService.loadCss()}_blabla|"></div>
</a>
<span th:text="${#locale.getLanguage()}"></span>
</div>
接下来是来自 bean 的片段:
public String switchLocale() {
locale = LocaleContextHolder.getLocale();
if (locale.getLanguage().equals("en")) {
LocaleContextHolder.setLocale(EN_LOCALE);
return "?lang=el";
} else if (locale.getLanguage().equals("el")) {
LocaleContextHolder.setLocale(GR_LOCALE);
return "?lang=en";
} else {
return "";
}
}
因此,bean 中的代码已成功调用。我想这就是我的问题的解决方案。
非常感谢 @M.Deinum、@Wim Deblauwe 这两个人给我的建议。
我正在使用 Spring/SpringMVC 5.x 版本,在 Tomcat 服务器上使用 Thymeleaf 和 Bootstrap。
我需要问一些你可能觉得很“st@pid”的问题。
在我的 html 视图中,我有以下按钮或 link:
<input type="button" .../>
<a .../>
我不需要提交任何东西,所以我只使用一个简单的按钮,所以我认为我不需要任何表格(除非我需要这个)。
在这个 html 视图中(因为我在 html 标签中添加了 thymeleaf 库),我需要以某种方式添加, (但我不知道如何),到此按钮或 link,Spring EL 或 Thymeleaf EL 的表达式,因此我可以从 Spring bean,我通过我在控制器中添加的模型在视图中传递,例如:
${myBean.doSomething()
// or
${myBean.doSomething(parameters)
如果这不能理解,我可以用一些代码更新我的问题(我相信 Spring 开发人员 明白我在说什么)。
我不知道如何传递这个表达式。使用什么按钮属性或 link 标签? 我为按钮使用了“action”属性:
<input type="button" th:action="${myBean.doSomething()".../>
或 link 标签中的“href”属性:
<a th:href= "${myBean.getStringUrlAndDoSomething()"/>
非常重要的信息
当我启动 tomcat 运行 页面时,EL 中的操作在页面加载时 运行 成功。当我按下按钮或 link 时没有任何反应。
我知道我不能使用“onclick”属性,因为我们在那里写JS代码。 但是我需要运行JavaSpring代码。
关于解决我的问题有什么想法吗? 提前致谢
我听从了@M.Deinum、@Wim Deblauwe 的建议,但我没有使用 这项工作的按钮。按钮需要一个表单才能工作。
这就是我使用 link 的原因,其中来自 bean 的方法被称为魅力,例如 以下片段:
<div class="blabla">
<div class="blablabla" th:text="|#{change_lang} EN/GR:|"></div>
<a class="bla" th:href="${localeService.switchLocale()}">
<div th:class="|${localeService.loadCss()}_blabla|"></div>
</a>
<span th:text="${#locale.getLanguage()}"></span>
</div>
接下来是来自 bean 的片段:
public String switchLocale() {
locale = LocaleContextHolder.getLocale();
if (locale.getLanguage().equals("en")) {
LocaleContextHolder.setLocale(EN_LOCALE);
return "?lang=el";
} else if (locale.getLanguage().equals("el")) {
LocaleContextHolder.setLocale(GR_LOCALE);
return "?lang=en";
} else {
return "";
}
}
因此,bean 中的代码已成功调用。我想这就是我的问题的解决方案。
非常感谢 @M.Deinum、@Wim Deblauwe 这两个人给我的建议。