SpringMVC+Freemarker+JSTLサポート

4283 ワード

前提:
ウェブプログラミングでは、共通のモジュールはバックグラウンドコードだけでなく、フロントエンドページも独立してモジュールにすることができると考えています.これとasp.Netの中のUserControllerはとても似ています
例えば、ある人の基本情報の展示インターフェースは、複数のインターフェースに埋め込む必要があり、もう一度書くのは適切ではないに違いない.
では、私の辞書モジュール、列挙タイプの読み取り、ドロップダウンボックス、アドレス選択コントロールなどとして表示されます....
Jspを使用する場合、jsp:includeまたはjstl直接c:importを導入してもよいし、パラメータ伝達をサポートする
struts 2を使用する場合、s:action executeResult=「true」も良い選択です.
springmvcに変えました.spring:importもあるようですが...フレームにラベルをつけるのはあまり好きではありません.
質問ですが、jspからstruts 2、springMVCまで、struts 2のラベルを勉強してspringのラベルに交換する必要がありますか?個人的には必要ないと思います.私はjstlに接触した後、接触したjavaEEのすべての環境から、jstlを使うことができて、私はどうしてそんなに多くのいつでも淘汰することができるラベルを学びます.また、書くコード生成ツールは、毎回フレームワークを変えるため、その中のいくつかのコードを拡張して再構築し、コードの冗長性が多すぎる.では、ラベルライブラリを統一したいです.学習の難易度を減らす
SpringMVC+freemarker+Sitemeshの構成はネット上に多すぎる.freemarkerにjstlを追加するサポートを検討する問題では、freemarker自体がタグ言語であり、jstlを追加する必要はないと考えている人が多い.(これを言う人はjstlとelの表現を間違えたのではないかと思っています).
 
freemarker jstl導入
従来の方法:
各テンプレートページに追加:<#assign c=JspTaglibs[]http://java.sun.com/jstl/core_rt"]>
その後、テンプレートで使用できます(1つのヘッダーに導入することはできません.他のページには含まれています.これは有効ではありません.各テンプレートページに書く必要があります).
<@c.import url=「someurl」/>というようにページの導入を行いました
######################################################################しかし、私は好きではありません.プログラマーの開発では、ビジネスに関係のないラベルが導入されたかどうかにも関心が必要です.ページもきれいではありません
私のやり方:
    1.ネット上の伝統的なfreemarkerの構成をspringmvcのservlet-configからxmlでspringMVC以外のプロファイルに移動
どのように配置して、1家のブログを探しました構成を参照してください.注意:彼の中の一言springのプロファイルアプリケーションContext.xmlに以下の構成を加えるこの構成は必ずアプリケーションContext*にある.xmlは、mvcのプロファイルには使用できません.私は実際の操作でSpringのApplicationContextでこのbeanを見つけられなかったからです.しかし、私は確かに彼を使う必要があります.

        class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> 
    2. SpringのContextLoaderListenerを書き換え、新しいタイプをwebに設定します.xml
      
public class ServletContextInitListener extends ContextLoaderListener { 

    @Override

    public void contextInitialized(ServletContextEvent event) { 

        super.contextInitialized(event);  //   , spring   

        initFreemarkerJSTLTaglibFactory(event.getServletContext());

    } 

    private void initFreemarkerJSTLTaglibFactory(ServletContext context){

        try {
      //SpringUtils , FreeMarkerConfigurer config
=SpringUtils.getBean(FreeMarkerConfigurer.class); TaglibFactory taglibFactory = config.getTaglibFactory(); context.setAttribute("c", taglibFactory.get("/WEB-INF/tlds/c.tld")); // taglib, application context.setAttribute("fn", taglibFactory.get("/WEB-INF/tlds/fn.tld")); System.out.println(" jstl "); } catch (Exception e) { e.printStackTrace(); } } }

このように、システムの実行後、テンプレートページは何もする必要がなく、<@c.import/>などのすべてのcとfnラベルの機能を直接使用することができ、その代価はグローバル変数cとfnを占有することである.
 
この方式は私がStruts 2+freemarkerの中でstruts 2のsラベルを処理するのと似ていますが、Struts 2の中で、私はこれをブロッカーの中に入れて、毎回ActionContextに押し込んで、しかしtldを読み取るのはやはりlistenerの中で、最初は読み取りもブロッカーに置いて、しかもキャッシュしていないで、全体のウェブサイトの応答が遅くて、原因は毎回tldを読みます....