<?xml version="1.0" encoding="Shift_JIS"?>
<document>

  <properties>
    <author email="jon@latchkey.com">Jon S. Stevens</author>
    <title>You make the decision - Sample Application</title>
    <translator>熊坂祐二</translator>
    <translator>高橋達男</translator>
    <original>ymtd/ymtd-sampleapp</original>
  </properties>

<body>

<section name="サンプルアプリケーション">

<p>
直接 Java に関連する問題に対処するために、
ユーザのアプリケーションで特別なコードを書かないといけない、
なんてことはあってはならないと、Velocity の開発者は考えています。
</p>

<p>
別の言い方をすると、JSP/Struts コミュニティの強い主張として、
「これは JSP の良くない使い方の例です」という意味のことを言うことがあります。
それは正しいかもしれませんが、結局のところ、実際に提供される例のほとんどすべてが
JSP の良くない使い方の例なのです。前に説明した通り、ページに埋め込まれた
Java コードは良くないのです。
ここまでの説明でそれを十分に分かっていただけたかと思います。
</p>

<p>
<a href="http://www.javaworld.com/">JavaWorld</a>に載っている
JSP に関する記事を読めば、どの記事でもこのツールの良くない使い方を示したものが
いろいろとあります。なぜ、（明らかに）優秀な人々の多くが、
このツールの使い方の正しい例を提示できないのでしょうか?
</p>

<p>
真実は、このツールを正しく使用することは非常に難しいということです。
Struts は、それを簡単にし、
正しいやり方を示そうとするという点で素晴らしい実績を残しています。
しかし、それは単に JSP 本来の設計の美しくない部分を隠しているだけです。
</p>

<p>
オブジェクト指向では、基本クラスに機能を追加するにはクラスを拡張 (extend)
するべしと言います。
ベースクラスのパブリックメソッドはそれを拡張したクラスでも使うことができます。
Struts を JSP にかぶせたからといって、JSP の欠点が治るわけではありません。
単に欠点を隠すだけで、しかもそれは開発者がそれに気づいたらそれまでです。
</p>

<source><![CDATA[
<%-- toolview.jsp --%>

<%
  String title = "Tool Listing";
  String deck = "A list of content creation tools";
  String desc = "Without tools, people are nothing more than animals.";
%>

<%@ include file="/header.jsp" %>

<%@ page session="false" %>
<%@ page errorPage="/errorTaker.jsp" %>

<jsp:useBean id="toolbean" class="ToolBean" scope="application">
  <jsp:setProperty name="toolbean" property="toolsFile"
                value='<%= application.getInitParameter("toolsFile") %>' />
</jsp:useBean>

<%
  Tool[] tools = toolbean.getTools(request.getParameter("state"));

  for (int i = 0; i < tools.length; i++) {
    Tool tool = tools[i];
%>
  <HR SIZE=2 ALIGN=LEFT>

  <H3>
  <%= tool.name %>

  <% if (tool.isNewWithin(45)) { %>
    <FONT COLOR="#FF0000"><B> (New!) </B></FONT>
  <% } else if (tool.isUpdatedWithin(45)) { %>
    <FONT COLOR="#FF0000"><B> (Updated!) </B></FONT>
  <% } %>

  </H3>
  <A HREF="<%= tool.homeURL %>"><%= tool.homeURL %></A><BR>

  <%= tool.comments %>

<% } %>

<%@ include file="/footer.jsp" %>
]]></source>

<source><![CDATA[
JSP の空白保持規則のため、スクリプトレットで if/else 文を書くときは、
慎重に行わなければなりません。
以下のコードは、*動作しません*。

  <% if (tool.isNewWithin(45)) { %>
    <FONT COLOR=#FF0000><B> (New!) </B></FONT>
  <% } %>
  <% else if (tool.isUpdatedWithin(45)) { %>
    <FONT COLOR=#FF0000><B> (Updated!) </B></FONT>
  <% } %>

このコードでは、背後にあるサーブレットが
if 節と else 節の間で改行を出力しようとするので、

「if」なしの「else」

という分かりにくいコンパイルエラーを引き起こします。

]]></source>

<hr noshade="true" size="1"/>

<p>
これは、上記の例を Velocity に翻訳したバージョンです
</p>

<source><![CDATA[
## toolview.vm

#set ($title = "Tool Listing")
#set ($deck = "A list of content creation tools")
#set ($desc = "Without tools, people are nothing more than animals." )

#parse ("header.vm")

$toolbean.setToolsFile($application.getInitParameter("toolsFile"))

#set ($tools = $toolbean.getTools($request.getParameter("state")))

#foreach ($tool in $tools)
  <HR SIZE=2 ALIGN=LEFT>

  <H3>
  $tool.Name

  #if ($tool.isNewWithin(45))
    <FONT COLOR="#FF0000"><B> (New!) </B></FONT>
  #elseif (tool.isUpdatedWithin(45))
    <FONT COLOR="#FF0000"><B> (Updated!) </B></FONT>
  #end
  </H3>
  <A HREF="$tool.homeURL">$tool.homeURL</A><BR>

  $tool.comments
#end

#parse ("footer.vm")
]]></source>

<p>
[どちらを選ぶかは] あなたが判断してください。
</p>
<p>
<strong>[ <a href="ymtd-javabeans.html">JavaBeans</a> &lt;- 前 | 
    次 -&gt; <a href="./ymtd-taglibs.html">taglib</a> ]
</strong></p>

</section>

</body>
</document>
