5

Springを使用していますが、この質問はすべてのJSPコントローラータイプの設計に当てはまります。

JSPページは、対応するコントローラーによって入力されたデータを(タグを使用して)参照します。私の質問は、JSPまたはコントローラでフォーマットを実行する適切な場所はどこですか?

これまで、コントローラーでフォーマットしてデータを準備してきました。

public class ViewPersonController extends org.springframework.web.servlet.mvc.AbstractController
{
    private static final Format MY_DATE_FORMAT = new SimpleDateFormat(...);
    protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)
    {
        Person person = get person from backing service layer or database
        Map properties = new HashMap();

        // No formatting required, name is a String
        properties.put("name", person.getName());

        // getBirthDate() returns Date and is formatted by a Format
        properties.put("birthDate", MY_DATE_FORMAT.format(person.getBirthDate()));

        // latitude and longitude are separate fields in Person, but in the UI it's one field
        properties.put("location", person.getLatitude() + ", " + person.getLongitude());

        return new ModelAndView("viewPerson", "person", properties);
    }
}

JSPファイルは次のようになります。

Name = <c:out value="${person. name}" /><br>
Birth Date = <c:out value="${person. birthDate}" /><br>
Location = <c:out value="${person. location}" /><br>

JSPにはフォーマットに関するいくつかの規定があることを私は知っています。

<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
<fmt:formatDate type="date" value="${person. birthDate}" />

ただし、これはJavaでのみ機能しますjava.util.Format。より複雑な値または計算された値が必要な場合はどうなりますか。このような場合、JSPにコードを配置するのは面倒です(そして醜いです)。

これがSpring/JSP/MVCの精神に従っているのかどうか知りたいです。言い換えれば、コントローラーはビューの一部ですか?ビュー関連のフォーマットを実行するのに適した場所はどこですか?私のコントローラーは、フォーマットされた値のマップではなく、オブジェクト(Person)を返す必要がありますか?

4

4 に答える 4

5

通常、JSPには多くの(または何か?)コードが含まれていないため、オプションは次のようになります。

  • コントローラ
  • タグライブラリ

通常、ビューはフォーマットなどを考慮したコードであるため、ほとんどの場合、タグライブラリがおそらく必要なものになると思います。

標準のタグライブラリでうまくいかない場合でも、作成するのは難しくないので、自分で作成することができます。

于 2008-12-12T00:55:09.077 に答える
1

私は通常、Beanまたはビューの「ヘルパー」でフォーマットなどを行います。これには、次のようないくつかの利点があります。

  1. テストが簡単
  2. カスタムtablibで行ったことを移植したり書き直したりすることを心配せずに、ビューテクノロジーを変更する柔軟性。
  3. よりクリーンで、コントローラーとビューコードの保守が容易です。
于 2008-12-12T01:09:43.103 に答える
1

表示レイヤーの一部をフォーマットすることを検討したいので、JSP で行います。私は最近 Velocity を使用しましたが、JSP と同じ考え方です。コントローラーはデータ モデルを返し、ビューはそのデータを目に見える表現にレンダリングする役割を果たします。一般的なニーズに対応する JSP タグ ライブラリが多数用意されています。

複雑な値または計算された値について言及しています。これらは結果データ モデルの要素のように聞こえるので、原則として合計値、最大値、その他の集計値などの他のデータによって決定できる場合でも、コントローラーで実行する必要があります。ビューでの書式設定とは、日付と数値の書式設定、行分割、配置などの基本的なことを意味します。もちろん、データとフォーマットされた表現の間の正確な線引きはアプリケーションによって異なりますが、おわかりいただけたと思います。

于 2008-12-12T05:26:57.593 に答える
0

私がそれをする方法は -

Person クラスのインスタンスは、ModelAndView のモデル内の唯一のオブジェクトになります。

「プレゼンテーション ロジック」を Person クラス自体に移動します。例えば、

public class Person {
    public String getLocation() {
        return this.latitude.concat(", ").concat(this.longitude);
    }
}

私は全体的にこのアプローチを考えています: 1 - ドメイン モデルを強化します。2 - コードの重複を減らします (別の JSP で場所を表示したい場合はどうしますか?あなたのアプローチでは、多くのコードが重複することになります)

于 2008-12-12T03:47:35.267 に答える