17

ここに示されている回答を要約すると、Eclipse の Spring MVC モデル オブジェクトの (jsp /jstl) ビューでのコード アシスト がまったく機能しません。変更する必要がある設定はありますか?

サンプルのspring-mvc-showcaseを github でダウンロードしたところですが、そのプロジェクトではそのままでは動作しません (11.1.3 または EAP 12 バージョンの両方のフル エンタープライズ エディション)。以下を参照してください (わかりません) formBean の取得元) :

fruit と foo はどちらも機能しますが、オートコンプリート オプションとしては利用できません

これは私自身のプロジェクトの例です。下のスクリーン ショット (下のフレーム) は、コントローラーがモデルに文字列属性を追加し、正しいビュー名を返すことを示しています。そのビューを編集するときに、shopString がオートコンプリート オプションとして提供されることを期待しますが、そうではありません。 コントローラーの上に表示される JSP。

sg は JavaScript 変数です。これは素晴らしいことですが、「shopString」はどこにありますか? この機能を取得するために変更する必要がある設定または他に欠けているものはありますか (すべてのスプリング プラグインで 11.1.3 エンタープライズ エディションを使用)。

スプリング固有の変数でも失敗しています: ここに画像の説明を入力

これは間違いなく機能するオープン ソース (春のチュートリアル プロジェクトの 1 つですか?) ですか? それとも、Intellij のインストールで変更が必要な設定がありますか (バージョン 12 EAP の新しいダウンロードでテストしました) ?

以下のもう 1 つのスクリーンショットは、すべての 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. )。IntelliJ は、少なくとも 7 年間、そのようなページの完全なコード補完を提供してきました。

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ことができます。最も良いことの1つは、未使用のゲッター警告も消えることです。使用状況の表示アクションは、JSPまたはPOJOから直接呼び出すことができます。

これはJSFでも機能し、特にJSFコンポーネント内で機能します。警告とエラーを表示して、この種のコードを補完する非常に優れた機能。

IntellijIdeaへの切り替えに役立つことを願っています。

編集:私はまた、この発見を友人に報告しました。すべてを素敵なブログエントリにまとめました。多分あなたはそれを読むことに興味があります:オープンリンク

于 2012-10-05T12:05:08.993 に答える
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 に答える
0

これはintellij 122.694の最新リリースで修正されました。

于 2012-11-02T15:14:14.373 に答える