2011-01-19 9 views
2

今、私のweb.xmlは、Spring MVCが* .htmlサフィックスを持つものを引き継ぐように設定されています。現在のユーザー状態に基づいてWebリンクを生成するコントローラがいくつかあります。Spring MVCはWebリンクを構築するためのJava APIを提供していますか?

たとえば、私は、「次へ」ボタンがポイントすべきかを決定するために、次のコードがあります:私は「.htmlを」をハードコーディングしていますので、私はこのアプローチを好きではない、

if (nextSlide != null) { 
    nextLink = String.format("/%s/module/%d/slide/%d.html", studyName, moduleId, nextSlide.getKey()); 
} 
else { 
    nextLink = String.format("/%s/module/all.html", studyName); 
} 

をしかし、ここのリンクに。私は確かにすべてのコントローラコードから隠すために ".html"接尾辞付きのリンクを生成するファクトリを作成することができますが、それでも私のJavaコードでは ".html"を一度ハードコードする必要があります。

私は基本的に、Spring MVCにリンクを構築するためのいくつかのAPIがあることを期待しています。これらのAPIが存在しない場合、ここで行っているようにJavaコードのサフィックスをハードコードしていますか?

答えて

1

ありません。あなたが現在持っているものを考えると、3つの選択肢があります。これらのうちの2つはあなたのオプションとdwbのオプションです。もう1つは独自のtaglibを作成することです。

何らかの種類のウィザード機能(画面2は画面1のクリックに依存している)のようです。そのような場合は、Spring Webflowを調べます。

もう1つの可能性は、AJAXコールアウトを何らかの決定メソッドに実行することです。または、JavaScriptを使用してクライアント側でこれをすべて処理できます。

また、FWIWでは、.htmlの記述がDRYを中断しているとは思っていませんが、サーブレットがこの接尾辞以外のものと一致した場合のメンテナンスが心配です。私はあなたに同意

@RequestMapping("slide/{id}") 
public String goToSlide(@PathParam("id") String id, ModelMap model) { 
    model.adAttribute("slide", slideService.findById(id)); 
    return "slides/slide"; 
} 

@RequestMapping("all") 
public String getAllSlides() { 
    return "slides/all"; 
} 

@RequestMapping(value="slideshow/{id}", method=RequestMethod.GET) 
public String getSlideshow(@PathParam("id") String slideshowId, ModelMap model) { 
    model.attAttribute("slideshow", slideshowService.findById(slideshowId)); 
    return "slides/slideshow"; 
} 

@RequestMapping(value="slideshow", method=RequestMethod.POST) 
public String postSlideshow(@QueryParam("slideId") String slideId) { 
    if(slideId != null) { 
     return "slide/" + slideId; 
    } 
    return "redirect:all"; 
} 
1

ビルドURLは、コントローラではなくビューで処理する必要があります。ビューに移動すると、Javaでハードコードを行う必要がなくなります。また、SpringのURLタグを利用することもできます。 Spring APIドキュメントから:

<spring:url value="/url/path/{variableName}"> 
    <spring:param name="variableName" value="more than JSTL c:url" /> 
</spring:url> 

// Results in: /currentApplicationContext/url/path/more%20than%20JSTL%20c%3Aurl 
+0

が、私は私の現在のプロジェクトのためのJava側でそれをやった理由:あなたは、最も可能性が高いだけで、本質的に新しいModelAndViewを返すか、少なくとも一つにリダイレクトすることで、以下の例に似た何かができますこれは、次のリンクを決定するために多くの計算を必要とするためです。私がビューでそれを行うならば、多くの変数がモデルに渡され、多くの論理がリンクを構築するという視点で結局終わるでしょうが、それははるかにきれいではありません。 – limc

関連する問題