Spring MVC 直接从thymeleaf模板访问singleton bean?

unftdfkk  于 2023-04-06  发布在  Spring
关注(0)|答案(1)|浏览(172)

我正在学习Spring,但它令人困惑。
我有一个singleton bean:

@Component
public class PuzzleUtil {
  @Bean
  @Scope("singleton")
  public PuzzleUtil puzzleUtil() {
    return new PuzzleUtil();
  }

  public ArrayList<String> getCategories() {
    // ...
  }
}

在我的Web应用程序类中,当我加载索引页面时,我为类别设置了一个属性:

@Controller
@SpringBootApplication
public class MathPuzzlesWebApplication extends SpringBootServletInitializer {
  @Autowired
  private PuzzleUtil puzzleUtil;
  
  @GetMapping("/index.html")
  public String index(Model model) {
    model.addAttribute("categories", puzzleUtil.getCategories());
    return "index";
  }

  // ...
}

现在,我可以访问index.html模板中的categories数组:

<table>
        <th:block th:each="category: ${categories}">
        <tr>
            <td th:text="${category}"></td>
        </tr>
        </th:block>
        </table>

一切按计划进行。
但是,似乎在我的控制器类中添加属性到模型是一个额外的步骤。bean是一个单例,所以我认为我应该能够直接从模板访问它。我尝试了这个:

<th:block th:each="category: ${puzzleUtil.categories}">

但是,我得到一个错误:

EL1007E: Property or field 'categories' cannot be found on null

是我错过了什么,还是我不可能做我想做的事情?

2wnc66cl

2wnc66cl1#

尝试在thymeleaf中使用带bean的@符号

<th:block th:each="category: ${@puzzleUtil.getCategories()}">

相关问题