intellij在JSP代码检查或自动完成中不解析el变量

Nim*_*sky 15 java jsp el intellij-idea

总结这里显示的答案Eclipse中的Spring MVC模型对象的(jsp/jstl)视图中的代码辅助 对我来说根本不起作用,是否需要更改设置?

我刚刚在github上下载了示例spring-mvc-showcase,它在该项目中没有开箱即用(11.1.3或EAP 12版本都是完整的企业版),见下文(我不知道)它从哪里得到formBean):

fruit和foo都可以使用,但不能作为自动完成选项使用

这是我自己项目中的一个示例,下面的屏幕截图(底部框架)显示我的控制器向模型添加字符串属性并返回正确的视图名称.我希望shopString在编辑该视图时可以作为自动完成选项提供,但它不是: JSP显示abover控制器,当

sg是一个javascript变量 - 它应该在那里很棒,但是"shopString"在哪里?是否有我需要更改的设置或其他我无法获得此功能的东西(使用带有所有弹簧插件的11.1.3企业版).

弹簧特定变量也失败了: 在此输入图像描述

它们是一个开源(春季教程项目之一吗?),这绝对有效......或者我的Intellij安装中是否需要更改设置(我已经测试了12版EAP的全新下载)?

下面的另一个屏幕截图显示了我通过自动检测正确设置的所有spring coifg文件,但代码检查失败...这是spring-mvc-showcase项目: 代码检查和弹簧配置

Pak*_*kka 24

有一种标准的方法可以做到这一点,而不是特定于IntelliJ的.

<jsp:useBean id="someModel" scope="request" type="foo.bar.SomeModelClass"/>
Run Code Online (Sandbox Code Playgroud)

这里的type属性不需要是具体类,它也可以是接口类型.通常,您将这些声明放在JSP/JSPX文件的开头,以提供类似"模型输入声明"的内容.

事实上,在Spring的原始书中推荐使用这种声明式方式的JSP(Expert One-on-One J2EE设计和开发).自至少7年以来,IntelliJ一直为这些页面提供完整的代码完成.

请注意,IntelliJ中还有其他相关的便利功能:如果EL变量引用标记为未定义,则可以按Alt-Enter选择QuickFix,它将插入如上所述的声明.它甚至会根据您访问的属性尝试找出实际类型.

  • 使用_type_时,它不会实例化任何内容.这就是_class_属性的用途. (4认同)

man*_*ana 13

据我了解Spring,没有关于变量定义的声明可以放入模型中.调用model.addAttribute()可以向模型添加对象,可以通过参数标识,也可以通过对象的类名自动生成.

因此,假设您有多个方法的情况如下:

@RequestMapping("foo") public String foo(Model model) { 
    model.addAttribute("model", new Foo());
    return new Random().nextBoolean() ? "page" : "someOtherPage";
}
@RequestMapping("bar") public String bar(Model model) { 
    model.addAttribute("model", new Bar());
    model.addAttribute("model", new Foo());
    model.addAttribute("model", new Bar());
    return new Random().nextBoolean() ? "page" : "someOtherPage";
}
Run Code Online (Sandbox Code Playgroud)

JSP就像是这样的

<c:out ${model.value} />
Run Code Online (Sandbox Code Playgroud)

由于没有适当的映射,在某些情况下哪些控制器可以转发到哪些视图,以及模型中究竟是什么,因此您的IDE没有真正的机会为您提供适当的信息.

但是为了支持IDE建议您一些有用的信息,您可以使用类型提示.因此,您必须复制对象的整个引用,例如foo并添加JSP注释,如:

<%--@elvariable id="foo" type="com.mycompany.SomeObject"--%>
Run Code Online (Sandbox Code Playgroud)

该警告将消失,完整IDE支持就在你身边,让你穿越田野foo.最好的事情之一就是未使用的吸气剂警告也会消失.您可以直接从JSP或POJO 直接调用show usages操作.

这也适用于JSF,尤其是JSF组件.这种代码完成的相当简洁的功能,显示警告和错误.

希望能帮助您切换到Intellij Idea.

编辑:我也向一位朋友报告了这个发现,将整个事情包装成一个不错的博客文章.也许你有兴趣阅读它:打开链接