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

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

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

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

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

sg是一个javascript变量 – 它应该很棒,但是“shopString”在哪里? 是否有我需要更改的设置或我缺少的其他东西才能获得此function(使用带有所有弹簧插件的11.1.3企业版)。

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

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

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

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

 

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

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

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

据我所知,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"; } 

JSP就像是这样的

  

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

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

 <%--@elvariable id="foo" type="com.mycompany.SomeObject"--%> 

警告将消失,完整的IDE支持就在您身边,允许您遍历 foo 的字段 。 最好的事情之一就是未使用的吸气剂警告也会消失。 您可以直接从JSP或POJO直接调用show usages操作。

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

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

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

这在intellij 122.694的最新版本中得到修复

当我开始编写自己的拦截器时,我遇到了类似的问题。 问题是我在视图解析器配置中开始使用refference xml问题

不要使用这样的结构

    -