6

Java (JSP ビューを使用した Spring MVC) で小さな Web サイトを構築しており、いくつかの再利用可能なモジュール (「最新ニュース」「今後のイベント」など) を作成して含めるための最適なソリューションを見つけようとしています。

問題は、ポートレット、タイル、またはその他のテクノロジですか?

4

7 に答える 7

4

Spring MVC を使用している場合は、ポートレットを使用することをお勧めします。Spring では、ポートレットはページ全体のフラグメントのみを担当するため、軽量のコントローラーに過ぎず、非常に簡単に記述できます。Spring 2.5 を使用している場合は、新しいアノテーション サポートのすべての利点を享受できます。それらは、Spring アプリケーション全体にうまく適合し、依存性注入や Spring を使用するその他の利点があります。

ポートレット コントローラーは、サーブレット コントローラーとほとんど同じです。簡単な例を次に示します。

@RequestMapping("VIEW")
@Controller
public class NewsPortlet {

    private NewsService newsService;

    @Autowired
    public NewsPortlet(NewsService newsService) {
        this.newsService = newsService;
    }

    @RequestMapping(method = RequestMethod.GET)
    public String view(Model model) {
        model.addAttribute(newsService.getLatests(10));
        return "news";        
    }
}

ここでは、 NewsService がコントローラーに自動的に挿入されます。ビュー メソッドはモデルに List オブジェクトを追加します。これは、JSP で ${newsList} として使用できます。Spring は、メソッドの戻り値に基づいて、news.jsp という名前のビューを探します。RequestMapping は、このコントローラーがポートレットの VIEW モード用であることを Spring に伝えます。

XML 構成では、ビューとコントローラーが配置されている場所を指定するだけで済みます。

<!-- look for controllers and services here -->
<context:component-scan base-package="com.example.news"/>

<!-- look for views here -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/news/"/>
    <property name="suffix" value=".jsp"/>
</bean>

既存のアプリケーションにポートレットを単純に埋め込む場合は、 eXoSun、またはApacheなどのポートレット コンテナーをバンドルできます。アプリケーションを一連のポートレットとして構築する場合は、 Liferay Portalなどの本格的なポータル ソリューションを検討することをお勧めします。

于 2008-09-16T13:24:51.553 に答える
2

タイルは苦痛かもしれません。以前のもの(つまり何もない)よりも大幅に改善されていますが、むしろ制限されています。

JSP に落ち着いていない限り、 Wicketの方が探しているものである可能性があります。

于 2008-09-16T12:32:20.960 に答える
2

アプリケーションが本当にWeb ポータルでない限り、ポートレットの使用はお勧めしません。

「再利用可能なコンポーネント」でJSP タグファイルを使用するだけの場合は、通常の JSP と同じであるため、非常にシンプルですが非常に強力です。

私はタイルを使用した経験があり、関連する複雑さはそれだけの価値がありません.

于 2009-01-08T19:28:57.037 に答える
1

私はポートレットを Ajax JSF (IceFaces) および Liferay Portal と組み合わせて使用​​した経験が豊富で、誰にもお勧めしません。もちろん、Spring MVC と JSP を使用すると、はるかに便利で軽量になると思いますが、とにかく、ポートレットは技術的に十分にサポートされていません。

于 2009-07-21T15:33:35.207 に答える
1

私はGWTの大ファンです。コンポーネントを通常の Java クラスとして記述し、自由にページに挿入できます。全体がJavascriptにコンパイルされることになります。

次に例を示します。

public class MyApplication implements EntryPoint, HistoryListener
{
    static final String INIT_STATE = "status";

    /**
     * This is the entry point method.  Instantiates the home page.
     */
    public void onModuleLoad ()
    {
        RootPanel.get ().setStyleName ("root");
        initHistorySupport ();
    }

    private void initHistorySupport ()
    {
        History.addHistoryListener (this);

        // check to see if there are any tokens passed at startup via the browser’s URI
        String token = History.getToken ();
        if (token.length () == 0)
        {
            onHistoryChanged (INIT_STATE);
        }
        else
        {
            onHistoryChanged (token);
        }
    }


    /**
     * Fired when the user clicks the browser's 'back' or 'forward' buttons.
     *
     * @param historyToken the token representing the current history state
     */
    public void onHistoryChanged (String historyToken)
    {
        RootPanel.get ().clear ();
        Page page;
        if (Page1.TOKEN.equalsIgnoreCase (historyToken))
        {
            page = new Page1 ();
        }
        else if (Page2.TOKEN.equalsIgnoreCase (historyToken))
        {
            page = new Page2 ();
        }
        else if (Page3.TOKEN.equalsIgnoreCase (historyToken))
        {
            page = new Page3 ();
        }
        RootPanel.get ().add (page);
    }
}
于 2008-09-16T12:45:16.907 に答える
0

I'm not 100% sure what "reusable components" means in this context, but if you mean that you want certain common elements to appear on every page, such as banner, footer, navigation links, etc., then look no further than SiteMesh. My team has used it successfully on a couple of internationalised web applications.

于 2008-09-17T09:04:14.213 に答える
0

Tapestryは、再利用可能なコンポーネントを簡単に作成することに重点を置いた Java Web アプリ フレームワークです。

私は sitemesh を使用しており、一連のページを標準のヘッダーとフッターでラップするのに適していますが、Tapestry は多くのページで、おそらくページごとに何度も使用されるコンポーネントを作成するのに適しています. Tapestry コンポーネントは、他のコンポーネントをパラメーターとして受け取ることができるため、Sitemesh スタイルのラッピングが可能になります。

于 2008-09-16T12:33:43.407 に答える