从查看Thymeleaf Spring尝试调用方法时出错

时间:2018-01-23 13:23:11

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

我尝试从视图中调用方法时遇到问题。

我的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;
    }
}

I add an image of the folder structure of the project

3 个答案:

答案 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>