17

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

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

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

这是我自己项目中的一个示例,下面的屏幕截图(底部框架)显示了我的控制器向模型添加字符串属性并返回正确的视图名称。然后,我希望在编辑该视图时将 shopString 作为自动完成选项提供,但事实并非如此: 上面显示的 JSP 控制器,提供的自动完成功能

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

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

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

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

4

4 回答 4

30

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

<jsp:useBean id="someModel" scope="request" type="foo.bar.SomeModelClass"/>

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

以这种声明方式使用 JSP 是在 Spring 的原著中推荐的,事实上(Expert One-on-One J2EE Design and Development.)。至少 7 年以来,IntelliJ 一直为此类页面提供完整的代码完成。

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

于 2012-10-06T08:31:12.717 回答
16

据我了解 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 将类似于

<c:out ${model.value} />

由于没有正确映射哪些控制器在某些情况下可以转发到哪些视图,也没有正确映射模型中的内容,因此您的 IDE 没有真正的机会为您提供正确的信息。

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

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

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

这也适用于 JSF,尤其是在 JSF 组件中。具有这种代码完成功能的非常简洁的功能,显示警告和错误。

希望对您切换到 Intellij Idea 有所帮助。

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

于 2012-10-05T12:05:08.993 回答
0

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

于 2012-11-02T15:14:14.373 回答
0

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

不要使用这样的构造

<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" ref="prefix"/>
    <property name="suffix" ref="suffix"/>
</bean>-
于 2016-01-23T12:35:15.773 回答