0

SpringMVC と Thymeleaf を使用するスプリング ブート プロジェクトがあります。すべてのページに含まれるlayout.htmlで定義されたフッターがあります。とにかく、各ページの「ステータス」を表示するそのフッターに呼び出しを含めることはできますか。このようにサイトをナビゲートすると、ページのフッターには常に必要な情報が表示されますか?

Status オブジェクトを置く REST コントローラーがあります。

@Controller
public class StatusController {

@RequestMapping(value = "/status", method = RequestMethod.GET)
public String get(Model model) {

    Status status = new Stauts;
    LocalDate lastUpdate = statusRepository.findByLastUpdate();
    ...
     // do some work to update the status object
    model.addAttribute( STATUS, status );
    return "status";
}

私の footer.html には、次のように定義されています。

  <div th:fragment="foot">
    <div id="footer">
        <div class="container">
            <p class="muted credit">
            <form action="refreshData" th:action="@{/status}" method="get"></form>
            Last update status: <span th:text="${status.status}" class="text-info"></span>
            </p>
        </div>
    </div>
</div>

そして、各ページにはフッターが含まれます。

...

<div th:include="layout :: foot"></div>

</body>

コントローラーにブレークポイントを設定しましたが、呼び出されませんでした。ページの読み込み時に常にこの例外が発生します。

org.springframework.expression.spel.SpelEvaluationException: EL1007E:(pos 0): プロパティまたはフィールド 'status' が null で見つかりません

Ajax呼び出しを行うためにjQueryのようなものを使用する必要があるため、またはlayout.htmlにこれがあり、インクルードが呼び出しを行わないため(これはありそうもない)、コントローラーが呼び出されないのだろうか?

4

2 に答える 2

1

Spring MVC では、ページ/呼び出しごとに 1 つのコントローラーしかありません。一度に複数のコントローラーを呼び出すことはできません。これはあなたの問題だと思います。

複数の可能性があります。

  • このステータス変数を各コントローラーに自分で組み込む必要があります。

  • モデル属性ステータスを準備し、各コントローラーに適用される ControllerAdvice を作成します (デフォルト)

  • フッターでサービス呼び出しを使用して、次のようなステータスを取得します: th:text="${@statusService.status}"

私自身、この種のグローバルに利用可能な情報に対するサービス アプローチが気に入っています。

于 2014-10-13T09:16:42.127 に答える
0

現在:

<span th:text="${status.status}" class="text-info">

への変更

<span th:text="${status}" class="text-info">

これはnullを表示します

コントローラーで Status status = null; を設定しました。モデル マップで属性 status に設定します。そのため、 ${status} は null として評価されます (これは model.get("status") に他なりません)。 ${status.status} は null.status になります。 'status' が null で見つかりません

于 2014-10-09T14:52:25.890 に答える