2017-11-13 15 views
0

私が構築しているデモのサンプルSpring-petclinic Spring Bootアプリを使用しています。私は超基本的だと思われる何かをしようとしていますが、苦労しています(私はJava n00bです)。ここでSpring Bootサンプルアプリケーションでホスト名を表示するときのテンプレートエラー - ペットクリニック

は、サンプルアプリです:https://github.com/spring-projects/spring-petclinic

基本的に私は、ウェブサイトのウェルカムページにサーバのホスト名を表示したいです。 WelcomeController.javaファイル(spring-petclinic/src/main/java/org/springframework/samples/petclinic/system/WelcomeController.java)私は、次のしているで

:すべて私が交換した

package org.springframework.samples.petclinic.system; 

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 

@Controller 
class WelcomeController { 

    @RequestMapping("/") 
    public String welcome() { 
     return "Hello from " + System.getenv("HOSTNAME") + String.format("%n"); 
    } 
} 

は、あなたが上記の見るものへreturn "welcome"からの戻り値です。

ビルドが完了し、私は、アプリケーションを実行することができますが、次のエラーでページがロード:

Something happened... 

Error resolving template "Hello from d7710dcc2456 ", template might not exist or might not be accessible by any of the configured Template Resolvers 

私はmodel.addAttributeで遊んと追加public Stringブロックを追加、少し出ていました私の深みの!何か案は?

+0

'window.location'を使ってクライアントから? – StephaneM

+0

ホスト名の値がページに正しく返されるので、それほど多くはありません。 –

+0

私は明確にするために質問を編集しました –

答えて

1

を試してみてください@RequestMappingを使用してコントローラメソッドから値を取得すると、springは文字列値をから解決しますビューテンプレートが設定されています。したがって、返信 "welcome"はwelcome.htmlのresources/templates/ディレクトリを解決します。

"Hello from" + System.getenv( "HOSTNAME")+ String.format( "%n") を返すように置き換えると、 "Hello from" + System.getenvという名前のテンプレートが検索されます( "HOSTNAME")+ String.format( "%n")

これはresources/templates/の内部には存在しないため、エラーとなります。

このようなあなたのコントローラに変更し

:あなたがクライアント上でこれを表示したい場合は、なぜあなたは値を得ることはありません

@GetMapping("/") 
public String welcome(Model model) { 
    model.addAttribute("hostname", System.getenv("HOSTNAME")); 
    return "welcome"; 
} 

をそして、このようなあなたのwelcome.htmlを変更、

<h1>Hello from <span th:text="${hostname}">hostname</span></h1> 
+0

ありがとう、これは私がそれを働かせるのを助けました。最後に、次のものをコントローラ 'import org.springframework.ui.Model;に加え、これをhtmlファイル'

Hello from ホスト名

' –

-1

UPDATE - 編集後のご質問

マシンを実行しているのhostnameを取得するには、あなたが文字列を返す場合は、次の

import java.net.InetAddress; 
import java.net.UnknownHostException; 

String hostname; 
try { 
    InetAddress ia = InetAddress.getLocalHost(); 
    hostname = ia.getHostName(); 
} catch (UnknownHostException e) { 
    e.printStackTrace(); 
} 
//assuming your thymeleaf template file called 'welcome' 
model.addAttribute("hostname", hostname); 
return "welcome"; 

そして、あなたのテンプレートファイルに

<h1>Hello from <span th:text="${hostname}">hostname</span></h1> 
関連する問題