2012-10-02 22 views
13

總結這裏顯示的答案Code assist in (jsp /jstl) view for Spring MVC model objects in Eclipse 根本不適用於我,是否有需要更改的設置?intellij不能解決JSP代碼檢查或自動完成中的el變量

我剛剛在github上下載了示例spring-mvc-showcase,它不能在該項目中使用(無論是11.1.3還是EAP 12版本都是完整的企業版本),請參閱下文(我不知道它得到的formBean從):

fruit and foo, both work, but not available as autocomplete options

這是從我自己的項目的例子,下面的屏幕截圖(底框架)顯示了我的控制器添加一個字符串屬性建模和返回正確的視圖名稱。那麼我希望編輯該視圖時被提供shopString了自動填充選項,但它是不是: JSP shown abover controller, the autocomplete offered up when "s" typed

SG是一個javascript變量 - 如此之大,它應該有,但如果是「shopString」? 是否有需要更改的設置或其他我缺少的功能(使用所有彈出式插件的11.1.3企業版)。

它也未能在春特定的變量: enter image description here

是他們的一個開源(?春天教程項目之一),其中這絕對作品...或者是有一個設置我需要改變我Intellij安裝(我已經測試了版本12 EAP的全新下載)?

下面還有一個截圖顯示了通過自動檢測設置正確,我所有的春天coifg文件,但是代碼檢查失敗......這是spring-mvc-showcase項目: code inspection and spring config

+0

的IntelliJ是足夠聰明地識別並解決變量。如果它找不到東西,那就意味着你沒有把它們放在正確的地方,或者你沒有告訴IntelliJ它們在哪裏。 – duffymo

+0

@duffymo它是一個彈簧變量,它編譯得很好,並按預期工作。唯一不合格的是檢查。我試圖找出什麼是「正確的地方」,因爲所有的東西編譯和運行都很完美;我得到的唯一的失敗是在檢查中。 – NimChimpsky

+0

IntelliJ的哪個版本? 10或11,社區還是企業? – duffymo

回答

22

有一個標準的方法來做到這一點,這不是IntelliJ特定的。

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

類型屬性在這裏並不需要是一個具體的類,它可以是一個接口類型爲好。通常,您會將這些聲明放在JSP/JSPX文件的開頭,以提供類似「模型輸入聲明」的內容。

在Spring的原始書籍中推薦以這種聲明方式使用JSP,實際上(Expert One-on-One J2EE設計和開發)。至少7年以來,IntelliJ一直爲這些頁面提供完整的代碼完成。

請注意,在IntelliJ中還有其他相關的便利功能:如果EL變量引用標記爲未定義,則可以按Alt-Enter選擇QuickFix,該QuickFix將插入如上所述的聲明。它甚至會嘗試根據您訪問的屬性來確定實際的類型。

+1

謝謝,但useBean標籤也實例化了這個不必要的bean:http://stackoverflow.com/a/1855580/106261但是它確實啓用了我缺乏的功能。 – NimChimpsky

+4

使用_type_時不會實例化任何東西。這就是_class_屬性的用途。 –

+0

好的,謝謝,這種方式可能會更好 – NimChimpsky

11

據我瞭解春天,也沒有聲明您可能放入模型中的變量定義。調用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提示你一些有用的信息,你可以使用類型提示。因此,您必須複製對象的整個引用,例如, G。 FOO,並添加像JSP評論:

<%[email protected] id="foo" type="com.mycompany.SomeObject"--%> 

警告將會消失和全IDE支持就在你身邊,讓你遍歷領域的foo。 最好的事情之一是,未使用的吸氣警告也將消失。您可以直接從JSP或POJO調用顯示用例操作。

這也適用於JSF,特別是在JSF組件中。漂亮的功能有這種代碼完成,顯示警告和錯誤。

希望能幫助您切換到Intellij Idea。

編輯:我也向朋友報告了這個發現,把整個事情都包裝成了一個不錯的博客條目。也許你有興趣閱讀它:open link

+0

好的,我需要添加一行<% - @ elvariable id =「foo」type =「com.mycompany.SomeObject」 - %>。我仍然認爲它可能會自動執行,在您列出的角落案例中,您可以將「頁面」和「someOtherPage」兩個選項用於變量「model」,每個選項都有不同的類型:foo和bar。 – NimChimpsky

+0

我實際上讀過這個博客並發表了評論,我錯誤地認爲有一種方法可以讓它在沒有添加intellij特定評論的情況下工作。賞金途中... – NimChimpsky

0

我面對的時候開始寫我自己的攔截類似的問題,最新發布了固定。問題是,我開始在我看來解析器配置使用REFFERENCE xml issue

不使用敷設渠道這樣

<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" ref="prefix"/> 
    <property name="suffix" ref="suffix"/> 
</bean>-