我尝试从视图中调用方法时遇到问题。
我的Java类使用方法
public class FuncionesMuestroteca {
@Bean
public static boolean estoyMuestroteca() {
boolean resultado = false;
return resultado;
}
}
现在我从header.html调用函数
<th:block th:text="${FuncionesMuestroteca.estoyMuestroteca()}"/>
在POM.xml中,我导入了百日咳 - 额外版本2.1.0.RELEASE和thymeleaf 2.1.5
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-java8time</artifactId>
<version>2.1.0.RELEASE</version>
这里是StackTrace
org.springframework.expression.spel.SpelEvaluationException: EL1011E: Method call: Attempted to call method estoyMuestroteca() on null context object
如果您还有其他需要,请不要犹豫,告诉我,我会说出来。提前谢谢。
new StackTrace:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'estoyMuestroteca' available
HTML编辑
<div th:text="${@estoyMuestroteca.estoyMuestroteca()}"></div>
方法实际
@Configuration
public class FuncionesMuestroteca {
@Bean(name = "estoyMuestroteca")
public boolean estoyMuestroteca() {
boolean resultado = false;
return resultado;
}
}
答案 0 :(得分:4)
这里有几件事。首先,静态方法:
public class FuncionesMuestrotecaUtilidad { //note name change
public static boolean estoyMuestroteca() {
return false; //don't need to create extra variables if this is what you need
}
}
在HTML中,您可以使用正确的语法来调用静态方法:
<th:block th:text="${T(com.package.FuncionesMuestrotecaUtilidad).estoyMuestroteca()}">
<!-- do whatever -->
</th:block>
将com.package
替换为您的包裹名称。此外,这不需要@Bean
或@Configuration
注释 - 您只是直接调用静态方法。
对所有这些的主要警告是,可能有更好的方法来设计代码而不使用静态方法。但这超出了这个问题的范围。
最后,转移到更新版本的Thymeleaf是很有意义的。它的速度更快,限制性更强,功能更多。
答案 1 :(得分:0)
只需添加到主要答案中,如果您需要全球化通用的Model Attr,而不是每次都添加它们,则方法是使用@ControllerAdvice
和@ModelAttribute
方法-{{3 }}。
答案 2 :(得分:0)
以下是一种从视图中调用包含参数的方法的方法: 1:创建一个包含参数的接口方法(如果该方法不包含参数,请在示例函数中删除参数):
public interface RewriteUrl {
String rewriteUrl(String name, Integer id);
}
2:在bean的配置文件中,添加新的bean实现该接口,如下所示:
@Bean(name = "rewriteSongUrl")
public RewriteUrl rewriteSongUrl() {
return (String name, Integer id) -> {
String url = name + "." + id + ".html";
return getRewriteUrl(url);
};
}
3:在视图中,调用bean:
<a th:href="${@rewriteSongUrl.rewriteUrl(singer.name, singer.id)}"></a>