我正在学习Spring,但是它令人困惑。
我有一个单例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模板中的类别数组了:
<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
我错过了什么,或者是不可能做我想做的事?
尝试使用@符号在百里香中添加bean
<th:block th:each="category: ${@puzzleUtil.getCategories()}">