﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-公主她爹的网窝-随笔分类-Java技术</title><link>http://www.blogjava.net/mulin/category/18371.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 09:36:08 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 09:36:08 GMT</pubDate><ttl>60</ttl><item><title>视图帮助器</title><link>http://www.blogjava.net/mulin/archive/2007/01/08/92295.html</link><dc:creator>公主她爹</dc:creator><author>公主她爹</author><pubDate>Mon, 08 Jan 2007 01:08:00 GMT</pubDate><guid>http://www.blogjava.net/mulin/archive/2007/01/08/92295.html</guid><wfw:comment>http://www.blogjava.net/mulin/comments/92295.html</wfw:comment><comments>http://www.blogjava.net/mulin/archive/2007/01/08/92295.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mulin/comments/commentRss/92295.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mulin/services/trackbacks/92295.html</trackback:ping><description><![CDATA[
		<p style="LAYOUT-GRID-MODE: char">
				<strong>
						<span class="title">
								<span lang="ZH-CN" style="FONT-SIZE: 18pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 4.0pt; mso-fareast-language: ZH-CN">视图帮助器</span>
						</span>
						<span lang="EN-US" style="FONT-SIZE: 18pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">
								<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
								<o:p>
								</o:p>
						</span>
				</strong>
		</p>
		<h3 style="MARGIN: auto 0mm; LAYOUT-GRID-MODE: char">
				<span lang="ZH-CN" style="FONT-SIZE: 16pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">简要说明</span>
				<span lang="EN-US" style="FONT-SIZE: 16pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">
						<o:p>
						</o:p>
				</span>
		</h3>
		<p style="LAYOUT-GRID-MODE: char">
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">业务类变化非常快，而应用程序视图变化更快。业务和表示逻辑之间的耦合使得维护和重复利用非常困难。</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">
						<o:p>
						</o:p>
				</span>
		</p>
		<p style="LAYOUT-GRID-MODE: char">
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">“视图帮助器”是一个针对视图进行数据检索的类。它使数据资源适应一个可由应用程序视图使用的简单</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">API</span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">。“视图帮助器”模式把业务和应用程序类彼此分开，并使它们可以各自改变。这种分离做法还可以提高重复利用率，因为每个业务或表示组件之间几乎不存在依存关系。因此，视图就可以专注于格式化和表示逻辑，并让“视图帮助器”处理数据处理和检索。</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">
						<o:p>
						</o:p>
				</span>
		</p>
		<h3 style="MARGIN: auto 0mm; LAYOUT-GRID-MODE: char">
				<span lang="ZH-CN" style="FONT-SIZE: 16pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">详细说明</span>
				<span lang="EN-US" style="FONT-SIZE: 16pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">
						<o:p>
						</o:p>
				</span>
		</h3>
		<p class="MsoNormal" style="MARGIN: 0mm 0mm 0pt; LAYOUT-GRID-MODE: char; TEXT-ALIGN: left" align="left">
				<code>
						<b>
								<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">
										<a href="http://java.sun.com/blueprints/corej2eepatterns/Patterns/ValueListHandler.html" target="_blank">
												<span lang="ZH-CN" style="FONT-WEIGHT: normal; COLOR: black; TEXT-DECORATION: none; text-underline: none">请参</span>
												<span lang="ZH-CN" style="FONT-WEIGHT: normal; COLOR: black; TEXT-DECORATION: none; text-underline: none">阅<span style="mso-field-code: http://java.sun.com/blueprints/corej2eepatterns/Patterns/SessionFacade.html" ?_blank???="" \t=""></span> Core J2EE<sup><span style="mso-bidi-font-size: 7.5pt"> TM</span></sup> Patterns</span>
												<span style="FONT-WEIGHT: normal; COLOR: black; TEXT-DECORATION: none; text-underline: none">
												</span>
												<span lang="ZH-CN" style="FONT-WEIGHT: normal; COLOR: black; TEXT-DECORATION: none; text-underline: none">（核心</span>
												<span style="FONT-WEIGHT: normal; COLOR: black; TEXT-DECORATION: none; text-underline: none">J2EE </span>
												<span lang="ZH-CN" style="FONT-WEIGHT: normal; COLOR: black; TEXT-DECORATION: none; text-underline: none">™</span>
												<span lang="ZH-CN" style="FONT-WEIGHT: normal; COLOR: black; TEXT-DECORATION: none; text-underline: none">
												</span>
												<span lang="ZH-CN" style="FONT-WEIGHT: normal; COLOR: black; TEXT-DECORATION: none; text-underline: none">模式）</span>
												<span lang="ZH-CN" style="COLOR: black; TEXT-DECORATION: none; text-underline: none">
												</span>
												<span lang="ZH-CN" style="COLOR: black; TEXT-DECORATION: none; text-underline: none">。</span>
										</a>
								</span>
						</b>
				</code>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">
						<o:p>
						</o:p>
				</span>
		</p>
		<h3 style="MARGIN: auto 0mm; LAYOUT-GRID-MODE: char">
				<span lang="ZH-CN" style="FONT-SIZE: 16pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">详细示例</span>
				<span lang="EN-US" style="FONT-SIZE: 16pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">
						<o:p>
						</o:p>
				</span>
		</h3>
		<p style="LAYOUT-GRID-MODE: char">
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">Java</span>
				<sup>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 7.5pt; mso-fareast-language: ZH-CN">TM</span>
				</sup>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">BluePrints Program </span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">对于在浏览器客户上演示的建议是把</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">JavaServer Pages</span>
				<sup>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 7.5pt; mso-fareast-language: ZH-CN">TM</span>
				</sup>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">(JSP</span>
				<sup>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 7.5pt; mso-fareast-language: ZH-CN">TM</span>
				</sup>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">) </span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">页用作视图组件。实施“视图帮助器”的两个常用策略是 </span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">JavaBean</span>
				<sup>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 7.5pt; mso-fareast-language: ZH-CN">TM</span>
				</sup>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">
				</span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">帮助器策略以及自定义标记帮助器策略。</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">JSP </span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">页提供有助于实施“视图帮助器”的技术：</span>
				<code>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 10.0pt; mso-fareast-language: ZH-CN">useBean</span>
				</code>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">
				</span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">标记和自定义标记。</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">Java Pet Store </span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">网站将一个名为</span>
				<code>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 10.0pt; mso-fareast-language: ZH-CN">
								<a href="http://java.sun.com/blueprints/code/jps131/src/com/sun/j2ee/blueprints/catalog/client/CatalogHelper.java.html">CatalogHelper</a>
						</span>
				</code>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">的视图帮助器用作多种视图的视图帮助器。</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">Java Pet Store </span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">网站还使用</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">
						<a href="http://java.sun.com/products/jsp/jstl/index.html">JavaServer Pages<sup><span style="mso-bidi-font-size: 7.5pt">TM</span></sup> Standard Tag Library</a> (JSTL) </span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">技术使</span>
				<code>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 10.0pt; mso-fareast-language: ZH-CN">CatalogHelper</span>
				</code>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">方法适应</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">JSP </span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">页的需要。</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">
						<o:p>
						</o:p>
				</span>
		</p>
		<ul style="MARGIN-TOP: 0mm" type="disc">
				<li class="MsoNormal" style="MARGIN: 0mm 0mm 10pt; LAYOUT-GRID-MODE: char; TEXT-ALIGN: left; tab-stops: list 36.0pt; mso-list: l4 level1 lfo2">
						<span class="emph">
								<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">从</span>
						</span>
						<span class="emph">
								<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">JSP </span>
						</span>
						<span class="emph">
								<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">页使用</span>
						</span>
						<code>
								<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">CatalogHelper</span>
						</code>
						<span class="emph">
								<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">
								</span>
						</span>
						<span class="emph">
								<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">视图帮助器。</span>
						</span>
						<span lang="ZH-CN" style="FONT-FAMILY: 'MS UI Gothic'; mso-fareast-language: ZH-CN">
						</span>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">
								<o:p>
								</o:p>
						</span>
				</li>
		</ul>
		<p style="MARGIN-LEFT: 36pt; LAYOUT-GRID-MODE: char">
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">类</span>
				<code>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 10.0pt; mso-fareast-language: ZH-CN">CatalogHelper</span>
				</code>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">
				</span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">处理和隐藏访问</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">Java Pet Store </span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">示例应用程序目录的复杂过程，并提供一个连接其客户的简化接口。</span>
				<code>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 10.0pt; mso-fareast-language: ZH-CN">CatalogHelper</span>
				</code>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">
				</span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">就是</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">JavaBean Helper </span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">策略的一个示例。</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">
						<o:p>
						</o:p>
				</span>
		</p>
		<p align="center">
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">
						<br />图</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">1 </span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">中的顺序图显示“视图帮助器”如何代表视图访问数据源。该图中，视图组件是一个</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">JSP </span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">页类，该类是由</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">JSP </span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">页编译器从</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">JSP </span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">页源代码生成的。在此示例中，</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">JSP </span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">页通过两种方法访问</span>
				<code>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">CatalogHelper</span>
				</code>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">
				</span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">：直接方式，即使用</span>
				<code>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">useBean</span>
				</code>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">
				</span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">标记；以及间接方式，即通过</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">JSTL </span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">标记。<br /><br /><img src="file:///C:/Documents%20and%20Settings/Administrator/デスクトップ/1.jpg" /><br /><strong><span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 10.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">图</span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 10.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"> 1 </span></strong><span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 10.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"><strong>：“视图帮助器”模式结构图<br /><br /></strong></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0mm 0mm 10pt; LAYOUT-GRID-MODE: char; TEXT-ALIGN: left" align="left">
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">示例应用程序视图组件</span>
				<code>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">category.jsp</span>
				</code>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">
				</span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">在含有</span>
				<code>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">useBean</span>
				</code>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">
				</span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">标记的会话作用域内定义</span>
				<code>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">CatalogHelper</span>
				</code>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">
				</span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">的一个实例，如下面的示例所示：</span>
				<code>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 10.0pt; mso-fareast-language: ZH-CN">
						</span>
				</code>
		</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">jsp:useBean<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    id</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">catalog</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    class</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">com.sun.j2ee.blueprints.catalog.client.CatalogHelper</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    scope</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">session</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">/&gt;</span>
				<span style="COLOR: #000000"> </span>
		</div>
		<p class="MsoNormal" style="MARGIN: 0mm 0mm 10pt; LAYOUT-GRID-MODE: char; TEXT-ALIGN: left" align="left">
				<span lang="ZH-CN" style="FONT-FAMILY: 'MS UI Gothic'; mso-fareast-language: ZH-CN">
						<br />上面的标记定义类型</span>
				<code>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">CatalogHelper </span>
				</code>
				<span lang="ZH-CN" style="FONT-FAMILY: 'MS UI Gothic'; mso-fareast-language: ZH-CN">的一个</span>
				<code>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">HttpSession</span>
				</code>
				<span lang="EN-US" style="FONT-FAMILY: 'MS UI Gothic'; mso-fareast-language: ZH-CN">
				</span>
				<span lang="ZH-CN" style="FONT-FAMILY: 'MS UI Gothic'; mso-fareast-language: ZH-CN">属性</span>
				<code>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">catalog</span>
				</code>
				<span lang="ZH-CN" style="FONT-FAMILY: 'MS UI Gothic'; mso-fareast-language: ZH-CN">。该页中稍后的标记创建一个称为</span>
				<code>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">pageResults </span>
				</code>
				<span lang="ZH-CN" style="FONT-FAMILY: 'MS UI Gothic'; mso-fareast-language: ZH-CN">的变量，该变量是对</span>
				<code>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">CatalogHelper</span>
				</code>
				<span lang="EN-US" style="FONT-FAMILY: 'MS UI Gothic'; mso-fareast-language: ZH-CN">
				</span>
				<span lang="ZH-CN" style="FONT-FAMILY: 'MS UI Gothic'; mso-fareast-language: ZH-CN">方法</span>
				<code>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">getProducts </span>
				</code>
				<span lang="ZH-CN" style="FONT-FAMILY: 'MS UI Gothic'; mso-fareast-language: ZH-CN">调用的结果 </span>
				<code>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 10.0pt">
								<o:p>
								</o:p>
						</span>
				</code>
		</p>
		<p class="MsoNormal" style="MARGIN: 0mm 0mm 10pt; LAYOUT-GRID-MODE: char; TEXT-ALIGN: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">
				</span>
		</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">c:choose</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">c:when test</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">${param.count != null}</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">c:set value</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">${param.start}</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> target</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">${catalog}</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> property</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">start</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">c:set value</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">${param.count}</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> target</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">${catalog}</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> property</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">count</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span>
				<span style="COLOR: #000000">&lt;/</span>
				<span style="COLOR: #000000">c:when</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">c:otherwise</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">c:set value</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> target</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">${catalog}</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> property</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">start</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">c:set value</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">2</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> target</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">${catalog}</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> property</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">count</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span>
				<span style="COLOR: #000000">&lt;/</span>
				<span style="COLOR: #000000">c:otherwise</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">&lt;/</span>
				<span style="COLOR: #000000">c:choose</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">c:set value</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">en_US</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> target</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">${catalog}</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> property</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">locale</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">c:set value</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">${param.category_id}</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> target</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">${catalog}</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> property</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">categoryId</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">c:set value</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">${catalog.products}</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">var</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">pageResults</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">/&gt;</span>
		</div>
		<p class="MsoNormal" style="MARGIN: 0mm 0mm 10pt; LAYOUT-GRID-MODE: char; TEXT-ALIGN: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<br />
				<br />上面的标记块初始化用于调用<code><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">CatalogHelper</span></code><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN"></span><span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">方法</span><code><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">getProducts</span></code><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN"></span><span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">的方法调用参数（通过访问最后一行中的属性</span><code><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">catalog.products </span></code><code><span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">）。该标记块然后调用“视图帮助器”对象上的方法，并把结果</span></code><code><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN"><a href="http://java.sun.com/blueprints/code/jps131/src/com/sun/j2ee/blueprints/catalog/model/Page.java.html"><span lang="ZH-CN">页</span></a></span></code><span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">放在一个名为</span><code><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">pageResults </span></code><span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">的变量中。</span><code><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">CatalogHelper</span></code><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN"></span><span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">管理和隐藏以下复杂过程：选择数据源、从数据源获取产品数据以及把这些数据封装为一个</span><code><span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">页面</span></code><span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">对象。以下的代码示例中显示从</span><code><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN"><a href="http://java.sun.com/blueprints/code/jps131/src/com/sun/j2ee/blueprints/catalog/dao/CatalogDAO.java.html">CatalogDAO</a></span></code><span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">访问数据的代码。</span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN"><o:p></o:p></span></p>
		<pre style="LAYOUT-GRID-MODE: char">Page getProductsFromDAO(String categoryId, int start, int count, Locale locale)<br /> throws CatalogClientException {<br /> <br /> try {<br />  if (dao == null)<br />   dao = CatalogDAOFactory.getDAO();  <br />  <br />  return dao.getProducts(categoryId, start, count, locale);<br /> }catch (CatalogDAOSysException se) {<br />  System.out.println("Exception reading data from dao " + se);<br />  throw new CatalogClientException(se.getMessage());<br /> }<br />}    <br /></pre>
		<p class="MsoNormal" style="MARGIN: 0mm 0mm 10pt; LAYOUT-GRID-MODE: char; TEXT-ALIGN: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="ZH-CN" style="FONT-FAMILY: 'MS UI Gothic'; mso-fareast-language: ZH-CN">上面的</span>
				<span lang="EN-US" style="FONT-FAMILY: 'MS UI Gothic'; mso-fareast-language: ZH-CN">DAO </span>
				<span lang="ZH-CN" style="FONT-FAMILY: 'MS UI Gothic'; mso-fareast-language: ZH-CN">代码直接使用</span>
				<span lang="EN-US" style="FONT-FAMILY: 'MS UI Gothic'; mso-fareast-language: ZH-CN">JDBC </span>
				<span lang="ZH-CN" style="FONT-FAMILY: 'MS UI Gothic'; mso-fareast-language: ZH-CN">查询获取产品，如下面所示（此代码实际上来自</span>
				<code>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">
								<a href="http://java.sun.com/blueprints/code/jps131/src/com/sun/j2ee/blueprints/catalog/dao/CloudscapeCatalogDAO.java.html">CloudscapeCatalogDAO</a>
						</span>
				</code>
				<span lang="ZH-CN" style="FONT-FAMILY: 'MS UI Gothic'; mso-fareast-language: ZH-CN">）：</span> <span lang="EN-US" style="FONT-FAMILY: 'MS UI Gothic'; mso-fareast-language: ZH-CN"><span style="mso-spacerun: yes">  <br /><br />public Page getProducts(String categoryID, int start, int count, Locale l) <br /> throws CatalogDAOSysException {<br />   <br /> Connection c = null;<br /> PreparedStatement ps = null;<br /> ResultSet rs = null;<br /> Page ret = null;<br /> <br /> try {<br />  c = getDataSource().getConnection();</span></span></p>
		<p class="MsoNormal" style="MARGIN: 0mm 0mm 10pt; LAYOUT-GRID-MODE: char; TEXT-ALIGN: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-FAMILY: 'MS UI Gothic'; mso-fareast-language: ZH-CN">
						<span style="mso-spacerun: yes">  // Select<br />  ps = c.prepareStatement("select a.productid, name, descn "<br />     + "from (product a join "<br />                    + "product_details b on "<br />                    + "a.productid=b.productid) "<br />                    + "where locale = ? "<br />                    + "and a.catid = ? "<br />                    + "order by name",<br />                    ResultSet.TYPE_SCROLL_INSENSITIVE,<br />                    ResultSet.CONCUR_READ_ONLY);<br />        ps.setString(1, l.toString());<br />        ps.setString(2, categoryID);<br />        rs = ps.executeQuery();<br />        // ... and so on ...<br /></span>
				</span> </p>
		<p class="MsoNormal" style="MARGIN: 0mm 0mm 10pt; LAYOUT-GRID-MODE: char; TEXT-ALIGN: left; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt" align="left">
				<span lang="EN-US" style="FONT-SIZE: 7pt; FONT-FAMILY: 'MS UI Gothic'; mso-fareast-language: ZH-CN"> </span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">最后，同样是在</span>
				<code>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">products.js</span>
				</code>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">
				</span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">中，以下标记块格式化</span>
				<code>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">Page</span>
				</code>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">
				</span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">对象的内容（该对象由上面的代码创建，并将其保留在会话作用域中）。 </span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">JSTL </span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">标记（在</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">XML </span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">命名空间</span>
				<code>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">c:</span>
				</code>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">
				</span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">中）重复</span>
				<code>
						<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">Page</span>
				</code>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">
				</span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">集合，并提取和格式化结果页中的目录产品数据：</span> <br /><br />&lt;c:forEach var="item" items="${pageResults.list}" &gt;<br />&lt;tr&gt;<br /> &lt;td class="petstore_listing"&gt;<br />    &lt;c:url value="/product.screen" var="productURL"&gt;<br />     &lt;c:param name="product_id" value="${item.id}"/&gt;<br />    &lt;/c:url&gt;<br />    &lt;a href='&lt;c:out value="${productURL}"/&gt;'&gt;<br />    &lt;c:out value="${item.name}"/&gt;<br />   &lt;/a&gt;<br />   &lt;br&gt;<br />   &lt;c:out value="${item.description}"/&gt;<br />  &lt;/td&gt;<br /> &lt;/tr&gt;<br />&lt;/c:forEach&gt;<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN"><o:p>   </o:p><br />    </span><br /> 	</p>
		<p style="LAYOUT-GRID-MODE: char; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt">
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">此示例中理解的关键点是管理数据源选择和数据访问的所有代码都在“视图帮助器”中，而不是在</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">JSP </span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">页的小脚本中。</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 3.0pt; mso-fareast-language: ZH-CN">
						<o:p>
						</o:p>
				</span>
		</p>
		<p align="center">
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">同时注意，“视图帮助器”模式可以与其他模式进行组合。例如，“视图帮助器”可以使用</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">
						<a href="http://java.sun.com/blueprints/patterns/BusinessDelegate.html">Business Delegate</a>
				</span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">（业务代理）或</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">
						<a href="http://java.sun.com/blueprints/patterns/ServiceLocator.html">Service Locator</a>
				</span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">（服务定位程序）帮助管理数据访问。</span>
				<span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">Java Pet Store </span>
				<span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">示例应用程序说明如何把与其他模式组合的“视图帮助器”模式用作其总体设计的组成部分。</span>
		</p>
<img src ="http://www.blogjava.net/mulin/aggbug/92295.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mulin/" target="_blank">公主她爹</a> 2007-01-08 09:08 <a href="http://www.blogjava.net/mulin/archive/2007/01/08/92295.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP设计模式基础：View Helper模式 </title><link>http://www.blogjava.net/mulin/archive/2007/01/08/92289.html</link><dc:creator>公主她爹</dc:creator><author>公主她爹</author><pubDate>Mon, 08 Jan 2007 00:40:00 GMT</pubDate><guid>http://www.blogjava.net/mulin/archive/2007/01/08/92289.html</guid><wfw:comment>http://www.blogjava.net/mulin/comments/92289.html</wfw:comment><comments>http://www.blogjava.net/mulin/archive/2007/01/08/92289.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mulin/comments/commentRss/92289.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mulin/services/trackbacks/92289.html</trackback:ping><description><![CDATA[这篇从《JSP设计模式基础》（Apress, 2004）摘录的文章，描述了View Helper模式，并且向我们展示了如何创建一些能增加到你自己的工具箱的有用的View Helper(2,300 字， November 1, 2004) 。<br /><br /><div style="TEXT-INDENT: 21pt">View Helper模式告诉我们，我们能使用Helpers来使得在一个应用中，Model数据能够适应表现层的需要。典型的，表现层一般都包括一些JSP页面。这些页面由一些用来给用户显示内容的HTML和图片组成。然而，当这些页面需要显示一些存储在Model上的动态信息的时候，这里有一个问题出现了。你希望能够避免在页面上为了显示那些动态数据而使用嵌入的Java代码，你就得使用一些Helper来帮助你实现上述的功能。</div><div style="TEXT-INDENT: 21pt">要抛弃那些在控制器Servlet里将一些Model数据作为一个属性存储在request里面的想法。在一个页面里，你要获取Model数据，有三种选择。你可以以JSP脚本的形式嵌入Java代码；你也可以使用EL；或者你也可以使用一个Helper帮你取得数据。根据将表现层和商业逻辑分离的原则，使用一些Helper来帮助我们使得数据适应表现层的要求比将表现层代码和Java代码混在一起有意义（参见图1）。</div><div style="TEXT-INDENT: 21pt"><img alt="" src="http://blog.csdn.net/images/blog_csdn_net/hivon/clip_image002.jpg" /></div><div style="MARGIN: 0cm 0cm 0pt 105pt; TEXT-INDENT: 21pt">图1</div><div style="TEXT-INDENT: 21pt">你可以设想，通过使用简单易用的Helper代替Java代码，页面设计人员开发表现层变得简单多了。当然，前提是开发人员发布了一个Helper目录并且详细描述了这些Helper怎么使用；因为这样开发人员才会使用那些Helper。然而，如果在开发人员能够提供使Helper运行起来的Model数据之前，页面设计人员就已经设计了页面，就又有新的问题。解决这个问题的一个有用的技巧是在Helper里设置一些假数据以便在没有Model数据的时候显示；还有一个可以替代的方法是在Model里设置一些能使Helper运行的假数据。无论哪种方法，页面设计人员都不会在等待开发人员的时候闲起来。</div><div style="TEXT-INDENT: 21pt">使用Helper有如下优点：</div><div style="TEXT-INDENT: 21pt">。表现层的组件是标准化的，为应用提供了统一的look和feel</div><div style="TEXT-INDENT: 21pt">。Java代码从页面设计人员那里被抽离，使得他们有了易用的Helper来访问Model</div><div style="TEXT-INDENT: 21pt">。如果Model还不存在的话，你可以创建一些Helper来显示一些假数据。这样，不管应用程序的准备如何，页面设计人员都可以进行他们的设计工作。</div><div style="TEXT-INDENT: 21pt">。Helper作为业务数据和表现层的中介，它可以把两者清晰的分离开来。</div><div style="TEXT-INDENT: 21pt"> </div><div style="TEXT-INDENT: 21pt"><strong>实现JavaBeans Helper</strong><strong>的策略</strong></div><div style="TEXT-INDENT: 21pt">在为JSP页面开发Helper的时候，你有两种选择。你可以使用JavaBeans或者定制标签，具体选择哪一种取决于你在Helper中所要处理的数据。一般来说，JavaBeans适合你处理单个的数据，而定制标签却更适合使用在那些处理一系列数据的场合。然而，需要着重指出的是，你可以用任意一种方法来处理两种类型的数据。</div><div style="TEXT-INDENT: 21pt">实现View Helper模式的策略</div><div style="TEXT-INDENT: 21pt">你可以在一个JSP页面里用JavaBeans来实现Helper。当处理和格式化单一的文本数据时，JavaBeans模式的Helper非常简单易用。那些内置的JSP标签会让你非常简单和直观的使用JavaBeans。对JavaBeans的使用包括简单的声明，后面就可以引用该给定的标签了，就像下面那样：</div><div style="TEXT-INDENT: 21pt">&lt;%-- Declare bean --%&gt;</div><div style="TEXT-INDENT: 21pt">&lt;jsp:useBean id="myBean" class="jspBook.util.myBean"/&gt;</div><div style="TEXT-INDENT: 21pt">&lt;%-- Get first name from bean --%&gt;</div><div style="TEXT-INDENT: 21pt">Hello &lt;jsp:getProperty name="myBean" property="firstName"/&gt;,</div><div style="TEXT-INDENT: 21pt">welcome to Acme Products' o­nline store!</div><div style="TEXT-INDENT: 21pt">JavaBeans能做的事可不仅仅是简单的将数据项从Model里取出来，它还能格式化制定的数据项、进行计算或产生大块的数据项。如你所想，它非常适合使用内嵌的JSP标签来获取数据项。但是如果你使用JavaBeans太多，那么你的JSP页面将因为太多的Java代码而变得混乱不堪，不管你使用多少EL。在这种情况下，你应该把所有的附加行为封装到一个制定标签里面去。</div><div style="TEXT-INDENT: 21pt"> </div><div style="TEXT-INDENT: 21pt"><strong>实现定制标签Helper</strong><strong>的策略</strong></div><div style="TEXT-INDENT: 21pt">为了对付复杂Model的转换，定制标签能够嵌入Java代码，操作好几个有关数据的算子，只提供简单的标签给页面设计者使用。为了使用定制标签，你必须写一个继承了TagSupport或BodyTagSupport的类。你可以在标签库描述符里声明你的类，如下所示：</div><div style="TEXT-INDENT: 21pt">Listing 1. An Example TLD </div><div style="TEXT-INDENT: 21pt"> </div><div style="TEXT-INDENT: 21pt">&lt;?xml version="1.0" encoding="ISO-8859-1" ?&gt;</div><div style="TEXT-INDENT: 21pt">&lt;taglib xmlns="http://java.sun.com/xml/ns/j2ee"</div><div style="TEXT-INDENT: 21pt"><span>   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"</span></div><div style="TEXT-INDENT: 21pt"><span>   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee</span></div><div style="TEXT-INDENT: 21pt"> </div><div style="TEXT-INDENT: 21pt">web-jsptaglibrary_2_0.xsd"</div><div style="TEXT-INDENT: 21pt"><span>   version="2.0" &gt;</span></div><div style="TEXT-INDENT: 21pt"> </div><div style="TEXT-INDENT: 21pt">&lt;tlib-version&gt;1.0&lt;/tlib-version&gt;</div><div style="TEXT-INDENT: 21pt">&lt;jsp-version&gt;2.0&lt;/jsp-version&gt;</div><div style="TEXT-INDENT: 21pt">&lt;short-name&gt;myTags&lt;/short-name&gt;</div><div style="TEXT-INDENT: 21pt">&lt;description&gt;</div><div style="TEXT-INDENT: 21pt"><span>   Tag library to support the examples in Chapter 8</span></div><div style="TEXT-INDENT: 21pt">&lt;/description&gt;</div><div style="TEXT-INDENT: 21pt">&lt;tag&gt;</div><div style="TEXT-INDENT: 21pt"><span>   &lt;name&gt;myTag&lt;/name&gt;</span></div><div style="TEXT-INDENT: 21pt"><span>   &lt;tag-class&gt;jspbook.ch08.myTag&lt;/tag-class&gt;</span></div><div style="TEXT-INDENT: 21pt"><span>   &lt;body-content&gt;JSP&lt;/body-content&gt;</span></div><div style="TEXT-INDENT: 21pt"><span>   &lt;attribute&gt;</span></div><div style="TEXT-INDENT: 21pt"><span>      &lt;name&gt;myAttribute&lt;/name&gt;</span></div><div style="TEXT-INDENT: 21pt"><span>      &lt;required&gt;yes&lt;/required&gt;</span></div><div style="TEXT-INDENT: 21pt"><span>      &lt;/attribute&gt;</span></div><div style="TEXT-INDENT: 21pt">&lt;/tag&gt;</div><div style="TEXT-INDENT: 21pt">&lt;/taglib&gt; </div><div style="TEXT-INDENT: 21pt"> </div><div style="TEXT-INDENT: 21pt">通过在JSP页面里首先使用taglib指示符声明以后，这个定制标签就能够在页面里被引用，如下所示：</div><div style="TEXT-INDENT: 21pt">&lt;%@ taglib uri="/helpers" prefix="helpers" %&gt;</div><div style="TEXT-INDENT: 21pt"> </div><div style="TEXT-INDENT: 21pt">&lt;helpers:myTag myAttribute="some value"&gt;</div><div style="TEXT-INDENT: 21pt"><span>   Body text...</span></div><div style="TEXT-INDENT: 21pt">&lt;/helpers:myTag&gt;</div><div style="TEXT-INDENT: 21pt"> </div><div style="TEXT-INDENT: 21pt">我更倾向于使用定制标签作为View Helper的实现方式。因为当它们集中存储在应用服务器的时候，它们给了开发人员更多的访问Servlet上下文的权限并且提供了更多的性能优点。另一个我倾向于使用定制标签的原因是它更利于非Java开发人员直观的使用，它们的格式更像标准的HTML标签，这些HMTL标签对于我们大多数的人来说再熟悉不过。最后，一旦这些定制标签经过了你的开发和测试，你就可以在你的整个项目的所有JSP页面使用它们。一旦这些定制标签被设计得更加通用，那么你可以将它们打包起来在所有的项目中使用到它们。</div><div style="TEXT-INDENT: 21pt"> </div><div style="TEXT-INDENT: 21pt"><strong>实现Model</strong><strong>分离的策略</strong></div><div style="TEXT-INDENT: 21pt">不管是使用定制标签或者JavaBeans，提供独立的Helper是非常有用的，这些独立的Helper能够在没有Model数据存在的时候提供一系列的假数据来代替Model数据。这使得页面开发人员可以独立于开发团队而完成它们的任务。为了实现这种策略，Helper需要去检测Model的存在，以便使用一个真实的Model数据或者使用一个静态的假Model数据（如下图）。</div><div style="TEXT-INDENT: 21pt"><img alt="" src="http://blog.csdn.net/images/blog_csdn_net/hivon/clip_image003.jpg" /></div><div style="TEXT-INDENT: 21pt">按照这个思路，我们需要创建一个静态的Model来精确复制真实的Model。不是所有的时候都能让这两者保持同步。一个在某些时候更完美的替代方法是，让开发人员创造一些假数据到Model里头，以便页面开发人员能够当作真实Model已经存在一样；同时也确保了他们自己工作的那个Model永远是正确的（见图三）。</div><div style="TEXT-INDENT: 21pt"> </div><div style="TEXT-INDENT: 21pt"><img alt="" src="http://blog.csdn.net/images/blog_csdn_net/hivon/clip_image004.jpg" /></div><img src ="http://www.blogjava.net/mulin/aggbug/92289.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mulin/" target="_blank">公主她爹</a> 2007-01-08 08:40 <a href="http://www.blogjava.net/mulin/archive/2007/01/08/92289.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAXP的演进</title><link>http://www.blogjava.net/mulin/archive/2007/01/04/91673.html</link><dc:creator>公主她爹</dc:creator><author>公主她爹</author><pubDate>Thu, 04 Jan 2007 00:54:00 GMT</pubDate><guid>http://www.blogjava.net/mulin/archive/2007/01/04/91673.html</guid><wfw:comment>http://www.blogjava.net/mulin/comments/91673.html</wfw:comment><comments>http://www.blogjava.net/mulin/archive/2007/01/04/91673.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mulin/comments/commentRss/91673.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mulin/services/trackbacks/91673.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 摘要:JAXP （全称Java API for XML Parsing）的可插拔性（pluggability）在开发社区里引起很大的轰动。这点也是JAXP的精华所在。开发人员可以编写自己的xml处理器，只要它符合JAXP的APIs，这样底层不同的xml处理器可以任意切换而不用改应用程序的代码。JAXP的演进作者:Rahul Srivastava译者:[http://www.matrix.org.c...&nbsp;&nbsp;<a href='http://www.blogjava.net/mulin/archive/2007/01/04/91673.html'>阅读全文</a><img src ="http://www.blogjava.net/mulin/aggbug/91673.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mulin/" target="_blank">公主她爹</a> 2007-01-04 08:54 <a href="http://www.blogjava.net/mulin/archive/2007/01/04/91673.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>