【问题标题】:Using model value as bean in JSP在 JSP 中使用模型值作为 bean
【发布时间】:2024-04-15 08:20:02
【问题描述】:

给定以下控制器:

@Controller
public class LandingPageController {
    @RequestMapping(value = "/landingPage", method = RequestMethod.GET)
    public String landingPage(Map<String, Object> model) {
        model.put("page", new LandingPage());
        return "landingPage";
    }
}

这将是我的 jsp:

<c:forEach items="${page.links}" var="link">
    <a href="${link.reference}">${link.label}</a>
</c:forEach>

IntelliJ 显示以下警告:

无法解析变量“页面”

使用 quickfix,IntelliJ 添加:

<jsp:useBean id="page" scope="request" type="com.myApp.LandingPage"/>

这反过来会导致加载网站时出现重复变量异常。

现在我的问题是:

如何在 JSP 中定义变量(包括其类型)而不创建重复项?**

【问题讨论】:

  • 如果您删除 useBean、忽略 IntelliJ 警告并部署并运行您的应用程序会怎样?
  • 感谢您的回复。页面显示正确,没有任何错误。
  • 所以你可以删除你的问题。
  • 这是关于在 bean 的字段/方法上获得代码完成和避免拼写错误的支持。不仅仅是能够展示网站。
  • 然后改变你的问题。这根本不是你要问的。但恐怕答案是“没有办法:JSP EL 是一种动态的、基于反射的语言”

标签: jsp spring-mvc intellij-idea usebean


【解决方案1】:
<%--@elvariable id="page" type="com.myApp.LandingPage"--%>
<c:forEach items="${page.links}" var="link">
    <a href="${link.reference}">${link.label}</a>
</c:forEach>

使用 @elvariable,现在可以使用类型信息,并且 IntelliJ 会在方法(本示例中为 getLinks)不存在时提供代码完成和警告

看到这个question

【讨论】: