﻿<?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-伊峰独居-文章分类-jsp学习</title><link>http://www2.blogjava.net/yifeng661/category/16305.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 19:37:36 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 19:37:36 GMT</pubDate><ttl>60</ttl><item><title>(转)深入了解struts中的struts-config.xml </title><link>http://www.blogjava.net/yifeng661/articles/74498.html</link><dc:creator>伊峰</dc:creator><author>伊峰</author><pubDate>Wed, 11 Oct 2006 02:49:00 GMT</pubDate><guid>http://www.blogjava.net/yifeng661/articles/74498.html</guid><wfw:comment>http://www.blogjava.net/yifeng661/comments/74498.html</wfw:comment><comments>http://www.blogjava.net/yifeng661/articles/74498.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yifeng661/comments/commentRss/74498.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yifeng661/services/trackbacks/74498.html</trackback:ping><description><![CDATA[弄清楚struts-config.xml中各项元素的作用，对于我们构建web项目有莫大的好处。&lt;struts-config&gt;是struts的根元素，它主要有8个子元素，DTD定义如下： 
<p>&lt;!ELEMENT struts-config<br />(data-sources?,form-beans?,global-exceptions?,global-forwards?,action-mappings?,controller?,message-resources*,plug-in*)<br />&gt;<br />以上8个元素，下面一一描述：<br /><font color="#ff0000"><strong>1. date-sources元素<br /></strong></font><font color="#000000"><strong>　　</strong>date-sources元素用来配置应用程序所需要的数据源。java语言提供了javax.sql.DateSource接口，所有数据源必须实现该接口。如下配置：<br />&lt;data-sources&gt;<br />　　&lt;data-source type="org.apached.commons.dbcp.BasicDataSource"&gt;<br />　　　　………………<br />　　&lt;/data-source&gt;<br /></font>&lt;/data-sources&gt;<br />在Action中访问方式如：<br />javax.sql.DataSource dataSource;<br />java.sql.Connection myConnection;<br />try<br />{<br />　　dataSource = getDataSource(request);<br />　　myConnection　＝　dataSource.getConnection();<br />}<br />…………<br />　　如果是多数据源，可用如下配置：<br />&lt;data-sources&gt;<br />　　&lt;data-source key="a"  type="org.apached.commons.dbcp.BasicDataSource"&gt;<br />　　　　………………<br />　　&lt;/data-source&gt;<br />　　&lt;data-source key="b"   type="org.apached.commons.dbcp.BasicDataSource"&gt;<br />　　　　……………… <br />　　&lt;/data-source&gt;<br />&lt;/data-sources&gt;<br />访问方式：dataSource = getDataSource(request,"a");</p><p><strong><font color="#ff0000"> 2. form-beans元素</font></strong><br />　　该元素主要用来配置表单验证的类。它包含如下属性：<br />　　1. classname：一般用得少，指定和form-bean无素对应的配置类，默认为org.apache.struts.config.FormBeanConfig，如果自定义，则必须扩展FormBeanConfig类。可有可无。<br />　　2. name：ActionForm Bean的惟一标识。必须。<br />　　3. type：ActionForm的完整类名。必须。<br />如下所示：<br />&lt;form-beans&gt;<br />　　&lt;form-bean <br />　　　　　　name="Loign"<br />　　　　　　type="com.ha.login"&gt;<br />　　&lt;/form-bean&gt;<br />&lt;/form-beans&gt;<br />　　如果是动态Action FormBean，还必须配置form-bean元素的form-property子元素。它包含四个属性，上面三个，还有一个initial 元素：以字符串的形式设置表单字段的初始值，如果没有设置该属性，则是基本类型为0，如果是对象则为null。可有可无。如下所示：<br />&lt;form-beans&gt;<br />　　&lt;form-bean <br />　　　　　　name="Loign"<br />　　　　　　type="com.ha.login"&gt;<br />　　　　　&lt;form-property name="ok"  type="java.lang.String"/&gt;<br />　　　　　&lt;form-property name="oks"  type="java.lang.String"/&gt;<br />　　　　　&lt;form-property name="okss"  type="java.lang.Integer" initial="20"/&gt;<br />　　&lt;/form-bean&gt;<br />&lt;/form-beans&gt;</p><p><strong><font color="#ff0000"> 3. global-exceptions元素</font></strong><br />　　该元素主要配置异常处理，它的exception子元素代表全局的异常配置。struts采取配置的方式来处理异常。它用来设置java异常和异常处理类org.apache.struts.action.ExceptionHandler之间的映射。它有七个属性，如下所示：<br />　　1. className：指定和exception元素对应的配置类，默认为：org.apache.struts.config.ExceptionConfig。可有可无。<br />　　2. Handler：指定异常得理类，默认为：org.apache.struts.action.ExceptionHandler。可有可无<br />　　3. key：指定在Resource Bundle中描述该异常的消息key<br />　　4. path：指定当异常发生时的转发路径。<br />　　5. scope：指定ActionMessages实例的存放范围，可选值包括：request和session，默认为request。可有可无。<br />　　6. type：指定所需处理异常类的名字，必须。<br />　　7. bundle：指定Resource Bundle<br />如下所示：<br />&lt;global-exceptions&gt;<br />　　&lt;exception <br />　　　　　　key="global.error.invalidlogin"<br />　　　　　　path="/error.jsp"<br />　　　　　　scope="request"<br />　　　　　　type="com.hn.tree"<br />　　/&gt;<br />&lt;/global-exceptions&gt;</p><p><font color="#ff0000"><strong> 4. global-forwards元素<br /></strong></font>　　该元素主要用来声明全局的转发关系，它具有以下四个属性：<br />　　1. className：和forward元素对应的配置类，默认为：org.apache.struts.action.ActionForward。可有可无。<br />　　2. contextRelative：此项为true时，表时path属性以＂/＂开头，相对于当前上下文的URL，默认为false．可有可无。　<br />　　3. name：转发路径的逻辑名．必填。<br />　　4. path：转发或重定向的URL，当contextRelative=false时，URL路径相对于当前应用（application），当为ture时，表示URL路径相对于当前上下文（context）。<br />　　5.  redirect：当此项为ture时，表示执行重定向操作。当此项为false时表示转向操作。默认为false。<br />如下所示：<br />&lt;global-forwards&gt;<br />　　&lt;forward  name="forms1"  path="/a.do"/&gt;<br />　　&lt;forward  name="forms2"  path="/nb.jsp"/&gt;<br />&lt;global-forwards&gt;</p><p><font color="#ff0000"><strong> 5. action-mappings元素</strong></font><br />　　描述从特定的请求路径到相应的Action类的映射。它具有以下几个属性：<br />　　1. attribute：设置和Action关联的ActionForm Bean在request和session范围内的key。如：Form Bean存在于request范围内，此项设为“myBenas”，则在request.getAttribute("myBenas")就可以返回该Bean的实例。<br />　　2. classsName：和action元素对应的配置元素，默认为：org.apache.struts.action.ActionMapping.<br />　　3. forward：转发的URL路径。<br />　　4. include：指定包含的URL路径。<br />　　5. input：输入表单的URL路径，当表单验证失败时，将把请求转发到该URL。<br />　　6. name：指定和Action关联的Action FormBean的名字，该名字必须在Form-Bean定义过。<br />　　7. path：指定访问Action的路径，以“/”开头，无扩展名。<br />　　8. parameter：指定Actgion的配置参数，在Action类的execute()方法中，可以调用ActionMapping对象的getParameter()方法来读取该配置参数。<br />　　9. roles：指定允许调用该Action的安全角色，多个角色之间用，隔开，在处理请求时，RequestProcessor会根据该配置项来决定用户是否有权限调用Action权限。<br />　　10. scope：指定ActionForm Bean的存在范围，可选取为request和session，默认为session。<br />　　11. type：指定Action类的完整类名。<br />　　12. unknown：如果此项为true，表示可以处理用户发出的所有无效的Action URL，默认为false；<br />　　13. validate：指定是否要调用Action FormBean的validate方法，默认值为ture.<br />注：forward、include、type属性只能选中其中一项。<br />如下：<br />&lt;action path="/search"<br />　　　　type="zxj.okBean"<br />　　　　name="a1"<br />　　　　scope="request"<br />　　　　validate="true"<br />　　　　input="/b.jsp"&gt;<br />　　&lt;forward name="tig" path="/aa.jsp"/&gt;<br />&lt;/action&gt;<br />注：此中的forward是指局部的转发路径。global-forwards表示全局的转发路径。</p><p><font color="#ff0000"><strong> 6. controller元素<br /></strong></font>　　该元素用于配置ActionServlet。它具有以下属性。<br />　　1. bufferSize：指定上载文件的输入缓冲大小，可选，默认为4096<br />　　2. className：指定和controller元素对应的配置类，默认为org.apache.struts.config.ControllerConfig<br />　　3. conentType：字符编码，如果在Action和JSP网页中设置了，则覆盖该设置。<br />　　4. locale：指定是否把Locale对象保存到当前用户的session中，默认值为false.<br />　　5. processorClass：指定负责请求的java类完整路径。<br />　　6. tempDir：指定处理文件的临时工作目录，如果此项没有设置，将采用Servlet容器为web应用分配的临时工作目录。<br />　　7. nochache：如果为true：在响应结果中将加入特定的头参数：Pragma,Cache-Control和Expise，防止页面被保存在客户端的浏览器中，默认为false<br />如下：<br />&lt;controller<br />　　contentType="text/html;charset="UTF-8""<br />　　locale="true"<br />　　processorClass="con.ok"/&gt;</p><p><font color="#ff0000"><strong> 7. message-resources元素</strong></font><br />　　主要配置本地化消息文本，它具有以下属性。<br />　　1. className：和message-resources元素对应的配置类，默认为org.apache.struts.config.MessageResourcesConfig。<br />　　2. factory：指定消息资源的工厂类，默认为：org.apache.struts.util.PropertyMessageResourcesFactory类<br />　　3. key：指定Resource Bundle存放的ServletContext对象中时采用的属性Key，默认由Globals.MESSAGES_KEY定义的字符串常量，只允许一个Resource Bundle采用默认的属性Key。<br />　　4. null：指定MessageSources类如何处理未知消息的key，如果为true，则返回空字符串，如果为false，则返回相关字串，默认为false<br />　　5. prameter：指定MessageSources的资源文件名，如果为：a.b.ApplicationResources，则实际对应的文件路径为：WEB-INF/classes/a/b/ApplicationResources.properties.<br />如：<br />&lt;message-resources null="false" parameter="defaultResource"/&gt;<br />&lt;message-resources key="num1" null="false" parameter="test"/&gt;<br />访问为：<br />&lt;bean:message  key="zxj"/&gt;<br />&lt;bean:message  key="zxj"  bundle="num1"/&gt;<br />其中，zxj表法，messagesource资源文件中的一个字符串。</p><p><font color="#ff0000"><strong> 8. plugin-in元素</strong></font><br />　　配置Struts的插件，属性如下：<br />　　1. className：指定的Struts插件类，必须实现org.apache.struts.action.PlugiIn接口。如：<br />&lt;plug-in<br />　　className="a.b.c."&gt;<br />　　&lt;set-property property="xxx" value="/WEB-INF/aa.xml"  /&gt;<br />&lt;/plug-in&gt;</p><p> 后记，多模块的配置，可以供多个应用应用不同的struts-config.xml</p>  <img src ="http://www.blogjava.net/yifeng661/aggbug/74498.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yifeng661/" target="_blank">伊峰</a> 2006-10-11 10:49 <a href="http://www.blogjava.net/yifeng661/articles/74498.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用validate验证框架</title><link>http://www.blogjava.net/yifeng661/articles/71608.html</link><dc:creator>伊峰</dc:creator><author>伊峰</author><pubDate>Sun, 24 Sep 2006 14:43:00 GMT</pubDate><guid>http://www.blogjava.net/yifeng661/articles/71608.html</guid><wfw:comment>http://www.blogjava.net/yifeng661/comments/71608.html</wfw:comment><comments>http://www.blogjava.net/yifeng661/articles/71608.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yifeng661/comments/commentRss/71608.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yifeng661/services/trackbacks/71608.html</trackback:ping><description><![CDATA[
		<p>主要是两个配置文件和资源文件的修改，然后就是在jsp中输出验证的结果<br /><br />validator-rules.xml是验证注册类，用于定义验证逻辑，它的部分代码<br />&lt;validator name="required"<br />&lt;!—①--&gt;<br />className="org.apache.struts.util.StrutsValidator"<br />method="validateRequired"<br />&lt;!—② --&gt;<br />methodParams="java.lang.Object,<br />org.apache.commons.validator.validatorAction,<br />org.apache.commons.validator.Field,<br />org.apache.struts.action.ActionErrors,<br />javax.servlet.http.HttpServletRequest"<br />msg="errors.required"&gt;<br />&lt;!—③ --&gt;<br />&lt;javascript&gt;&lt;![CDATA[<br />function validateRequired(form) {<br />var bValid = true;<br />var focusField = null;<br />var i = 0;<br />var fields = new Array();<br /><br /><br />这个是required验证的部分代码。<br /><br />validation.xml文件用于定义实际应用中的规则验证（哪些域需要验证，要验证哪些验证（比如required验证、minlength验证等等））<br /><br />ApplicationResources文件主要是用于保存验证结果信息<br /><br />我用的是eclipse＋myeclipse<br />首先要在项目里面加入struts框架，这个不用说了吧，然后添加一个validation.xml文件<br /><br />&lt;form-validation&gt;<br /> &lt;formset&gt;<br />  &lt;form name="RegisterForm"&gt;<br />   &lt;field property="<font color="#0000ff">userName</font>" depends="required,minlength,maxlength"&gt;<br />    &lt;arg0 key="label.username" /&gt;<br />    &lt;arg1 name="minlength" key="3" resource="false" /&gt;<br />    &lt;arg1 name="maxlength" key="17" resource="false" /&gt;<br />    &lt;var&gt;<br />       &lt;var-name&gt;minlength&lt;/var-name&gt;<br />       &lt;var-value&gt;3&lt;/var-value&gt;<br />    &lt;/var&gt;<br />    &lt;var&gt;<br />       &lt;var-name&gt;maxlength&lt;/var-name&gt;<br />       &lt;var-value&gt;17&lt;/var-value&gt;<br />     &lt;/var&gt;<br />   &lt;/field&gt;<br /> &lt;/form&gt;<br /> &lt;/formset&gt;<br />&lt;/form-validation&gt;<br /><br />form name="RegisterForm指定验证名，也是actionform的名称，后面会用到。<br /><br />field property="userName指定要验证的域，也就是actionform中的属性<br /><br />depends="required,minlength,maxlength指定要通过哪些验证，这里有required,minlength,maxlength验证，他们依次进行验证，如果前面的验证没有通过，那么错误信息就保存到错误变量里面，不在进行下面的验证<br /><br />arg0 key="label.username则是在资源ApplicationResources文件中定义的字段，验证结果中信息显示需要。<br />如errors.required={0} is required，arg0的值会代替{0}，是第一个变量<br />arg1 name="minlength" key="3" resource="false" ，是第二个变量，但要注意的是 resource="false" ，表示它直接采用key属性所指定的值3去代替{1}，而不使用ApplicationResources文件中定义的字段，下面有对minlength的定义<br />  &lt;var&gt;<br />       &lt;var-name&gt;minlength&lt;/var-name&gt;<br />       &lt;var-value&gt;3&lt;/var-value&gt;<br />    &lt;/var&gt;<br /></p>
		<p>这些定义完之后，就是对资源文件的修改了，就是指定字段的替换<br /><br />最后在jsp文件中运用验证，简单的一段代码：<br /><br />&lt;td width="219" height="30" align="right"&gt;<br />    &lt;font size="2"&gt;<br />     &lt;b&gt;<br />      &lt;bean:message key="label.username" /&gt;<br />      :<br />     &lt;/b&gt;<br />    &lt;/font&gt;<br />   &lt;/td&gt;<br />   &lt;td width="218" height="30"&gt;<br />    &lt;html:text property="userName" maxlength="17" size="20" styleClass="smallInput" /&gt;<br />    &lt;font color="red"&gt;<br />     *<br />    &lt;/font&gt;<br />   &lt;/td&gt;<br />   &lt;td width="291" height="30"&gt;<br />    &lt;font size="2" color="red"&gt;<br />     &lt;b&gt;<br />     <strong><font color="#ff0000"> &lt;html:messages id="message" property="<font color="#0000ff">userName</font>"&gt;<br />       &lt;li&gt;<br />        &lt;bean:write name="message" /&gt;<br />       &lt;/li&gt;<br />      &lt;/html:messages&gt;<br /></font></strong>     &lt;/b&gt;<br />    &lt;/font&gt;<br />   &lt;/td&gt;<br />  &lt;/tr&gt;<br /><font color="#ff0000">红色</font>部分就是进行验证后的信息显示，其中<font color="#0000ff">蓝色</font>的部分名称要与validation.xml文件中的保持一致！！！<br /></p>
<img src ="http://www.blogjava.net/yifeng661/aggbug/71608.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yifeng661/" target="_blank">伊峰</a> 2006-09-24 22:43 <a href="http://www.blogjava.net/yifeng661/articles/71608.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Structs - 标签库（HTML）</title><link>http://www.blogjava.net/yifeng661/articles/71600.html</link><dc:creator>伊峰</dc:creator><author>伊峰</author><pubDate>Sun, 24 Sep 2006 13:52:00 GMT</pubDate><guid>http://www.blogjava.net/yifeng661/articles/71600.html</guid><wfw:comment>http://www.blogjava.net/yifeng661/comments/71600.html</wfw:comment><comments>http://www.blogjava.net/yifeng661/articles/71600.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yifeng661/comments/commentRss/71600.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yifeng661/services/trackbacks/71600.html</trackback:ping><description><![CDATA[
		<table style="TABLE-LAYOUT: fixed">
				<tbody>
						<tr>
								<td>
										<div class="cnt">
												<h2 class="diaryTitle">
														<strong>    Structs - 标签库（HTML)</strong>
												</h2>
												<div>Struts提供了五个标签库，即：HTML、Bean、Logic、Template和Nested。</div>
												<div>
														<table style="WIDTH: 959px; HEIGHT: 129px" bordercolor="#000000" cellspacing="1" cellpadding="1" bgcolor="#ffffcc" border="1">
																<tbody>
																		<tr>
																				<td align="middle">
																						<p align="center"> 标签库</p>
																				</td>
																				<td align="middle">
																						<p align="center"> 说明</p>
																				</td>
																		</tr>
																		<tr>
																				<td> HTML 标签</td>
																				<td> 用来创建能够和Struts 框架和其他相应的HTML 标签交互的HTML 输入表单</td>
																		</tr>
																		<tr>
																				<td> Bean 标签</td>
																				<td> 在访问JavaBeans 及其属性，以及定义一个新的bean 时使用</td>
																		</tr>
																		<tr>
																				<td> Logic 标签</td>
																				<td> 管理条件产生的输出和对象集产生的循环</td>
																		</tr>
																		<tr>
																				<td> Template 标签</td>
																				<td> 随着Tiles框架包的出现，此标记已开始减少使用</td>
																		</tr>
																		<tr>
																				<td> Nested 标签</td>
																				<td> 增强对其他的Struts 标签的嵌套使用的能力</td>
																		</tr>
																</tbody>
														</table>
												</div>
												<div>
														<strong>
														</strong>
												</div>
												<div>
														<strong>标签的公共特征</strong>
												</div>
												<div>
														<strong>
														</strong>
												</div>
												<div>使用固定属性名称的Struts 标签：</div>
												<div>
														<table style="WIDTH: 946px; HEIGHT: 108px" bordercolor="#000000" cellspacing="1" cellpadding="1" bgcolor="#ffffcc" border="1">
																<tbody>
																		<tr>
																				<td align="middle">
																						<p align="center"> 属性</p>
																				</td>
																				<td align="middle">
																						<p align="center"> 说明</p>
																				</td>
																		</tr>
																		<tr>
																				<td> id</td>
																				<td> 命名自定义标签创建时的脚本变量名。</td>
																		</tr>
																		<tr>
																				<td> name</td>
																				<td> 指出关键字值，在该关键字下可以找到一个存在的bean 。如果给出了scope属性，则仅仅在scope中查找。否则，根据标准的顺序在各种scope中查找：(page, request, session, or application)。</td>
																		</tr>
																		<tr>
																				<td> property</td>
																				<td> 指出bean 中的某个属性，可以在其中检索值。如果没有标明，则使用对象本身的值。</td>
																		</tr>
																		<tr>
																				<td> scope</td>
																				<td> 定义了Bean在哪个范围(page, request, session, or application)中被查找。如果没有标明按顺序查找。脚本变量(见id)将在相同的范围中创建。</td>
																		</tr>
																</tbody>
														</table>
												</div>
												<div>
												</div>
												<div>Struts 标签也支持嵌套引用，例如：<br /><table style="WIDTH: 947px; HEIGHT: 72px" bordercolor="#000000" cellspacing="1" cellpadding="1" bgcolor="#ffffcc" border="1"><tbody><tr><td>Property="foo.bar.baz"<br /><br />这相当于进行下面的调用：<br />getFoo().getBar().getBaz()；<br /><br />或者做为setter：<br />getFoo().getBar().setBaz(value)；</td></tr></tbody></table></div>
												<div>
														<strong>
														</strong>
												</div>
												<div>虽然Struts 标签的设计原意是为了避免使用scriptlet，scriptlet的表达式还能够提供给所有的Struts 标签使用。但请确保使用完整的表达式:<br /><div><strong><table style="WIDTH: 949px; HEIGHT: 90px" bordercolor="#000000" cellspacing="1" cellpadding="1" bgcolor="#ffffcc" border="1"><tbody><tr><td> 错误：<br /> &lt;html:link href="'&lt;%= "/" + name %&gt;/index.jsp&gt;'&gt;<br /> <br /> 正确：<br /> &lt;html:link href="'&lt;%= "/" + name + "/index.jsp" %&gt;'&gt;    // 表达式必须提供整个属性值</td></tr></tbody></table></strong></div></div>
												<div>
														<strong>
														</strong>
												</div>
												<div>
														<strong>
														</strong>
												</div>
												<div>
														<strong>Html 标签库</strong>
												</div>
												<ol>
														<li>&lt;html&gt;标签<br />它有两个属性：locale和xhtml，两者都不是必需的。<br /><div><strong><table style="WIDTH: 905px; HEIGHT: 73px" bordercolor="#000000" cellspacing="1" cellpadding="1" bgcolor="#ffffcc" border="1"><tbody><tr><td> &lt;html:html locale=\"true\"&gt;<br /><br /> 此行代码解析后：<br /> &lt;html lang=\"en\"&gt;</td></tr></tbody></table></strong></div>说明：生成的结果取决于Struts应用程序所位于的服务器的locale。如果你将应用程序部署到一个不同locale的服务器，你不需要改变代码，Locale会自动调整。 
</li>
														<li>&lt;base&gt;标签：表示所包含页面的绝对位置。这个标签只有内嵌在head标签中才有效。<br /><div><strong><table style="WIDTH: 907px; HEIGHT: 73px" bordercolor="#000000" cellspacing="1" cellpadding="1" bgcolor="#ffffcc" border="1"><tbody><tr><td> &lt;html:base/&gt;<br /><br /> 此行代码解析后：<br /> &lt;base href=\"http://www.mymain.com/myStrutsApp/testing.jsp\"&gt;</td></tr></tbody></table></strong></div></li>
														<li>
																<div>&lt;img&gt;标签<br />最重要的属性page：图象文件的路径，前面必须带有一个斜线。<br />其它属性：heignt、width、alt。</div>
																<div>
																		<strong>
																				<table style="WIDTH: 907px; HEIGHT: 24px" bordercolor="#000000" cellspacing="1" cellpadding="1" bgcolor="#ffffcc" border="1">
																						<tbody>
																								<tr>
																										<td>  &lt;html:img page=\"/logo.gif\" height=\"50\"  width=\"200\" alt=\"Web Logo\"/&gt;</td>
																								</tr>
																						</tbody>
																				</table>
																		</strong>
																</div>
														</li>
														<li>&lt;link&gt;标签<br /><div><strong><table style="WIDTH: 908px; HEIGHT: 40px" bordercolor="#000000" cellspacing="1" cellpadding="1" bgcolor="#ffffcc" border="1"><tbody><tr><td> &lt;html:link page=\"/index.html\"&gt;Click demo&lt;/html:link&gt;<br /><br /> 此行代码解析后：<br />  &lt;a href=\"/index.html\"&gt;Click demo&lt;/a&gt;</td></tr></tbody></table></strong></div></li>
														<li>&lt;errors&gt;标签：通过一个简单的&lt;html:errors/&gt;标签，你就可以在一个JSP页面上显示完全自定义的错误信息。功能超强大！！<br />说明：这个标签在Request对象的属性集合中查找reserved key。如果它找到一个reserved key，它就假设这个key是一个String、或是一个String数组  <br />        （它包含在模块的MessageResources中查找的message keys）、或是类型为org.apache.struts.action.ActionErrors的一个对象。<br />          如果在应用程序资源中存在相应的信息，那么就可以用下面这些可选的message keys：  <br />         · errors.header  or  errors.prefix：相应的信息在错误信息的单独列表前显示。 <br />         · errors.footer or  errors.suffix：相应的信息在错误信息的单独列表后显示。 
</li>
														<li>&lt;form&gt;标签系列<br />使用&lt;form&gt;标签时必须遵循一些规则： 
<ol><li>标签中必须包含一个action属性，它是这个标签中唯一必需的属性。如果不具备该属性则JSP页面会抛出一个异常。之后你必须给这个action属性指定一个有效值。一个有效值是指应用程序的Struts配置文件中元素里的任何一个子元素的访问路径。而且相应的元素中必须有一个name属性，它的值是form bean的名称。<br /><div><strong><table style="WIDTH: 624px; HEIGHT: 265px" bordercolor="#000000" cellspacing="1" cellpadding="1" bgcolor="#ffffcc" border="1"><tbody><tr><td> &lt;html:form action=\"/login\" &gt; <br /><br /> 如果你有上述一个标签 ，那么你的Struts配置文件的元素中必须有一个如下显示为粗体的元素： <br />&lt;action-mappings&gt; <br />     &lt;action path=\"/login\" <br />      type=\"com.javapro.struts.LoginAction\"  <br />      name=\"loginForm\"<br />      scope=\"request\"<br />      input=\"/login.jsp\"&gt;<br />      &lt;forward name=\"success\" path=\"/mainMenu.jsp\"/&gt;<br />    &lt;/action&gt;<br />    .<br />    .<br />    .<br />&lt;/action-mappings&gt;  // 这就是说一个form标签是和form bean相关联的。</td></tr></tbody></table><br /></strong></div></li><li><div>任何包含在&lt;form&gt;中用来接收用户输入的标签（&lt;text&gt;、&lt;password&gt;、&lt;hidden&gt;、&lt;textarea&gt;、&lt;radio&gt;、&lt;checkbox&gt;、&lt;select&gt;）必须在相关的form bean中有一个指定的属性值。比如，如果你有一个属性值被指定为“username”的&lt;text&gt;标签，那么相关的form bean中也必须有一个名为“username”的属性。输入&lt;text&gt;标签中的值会被用于生成form bean的userName属性。</div></li></ol><div><br />&lt;form&gt;标签还有一些不是必须但很有用的“次要”属性。<br />比如，你可以用focus属性来生成JavaScript，它会“定焦”（focus）到该form所包含的一个元素上。使用focus属性时你需要给它指定元素的名称。<br /></div><div><strong><table style="WIDTH: 664px; HEIGHT: 397px" bordercolor="#000000" cellspacing="1" cellpadding="1" bgcolor="#ffffcc" border="1"><tbody><tr><td> &lt;body&gt;<br /> &lt;html:form action=\"/login\" focus=\"password\"&gt;<br /> User Name: &lt;html:text property=\"userName\"/&gt;<br /> &lt;br&gt;Password: &lt;html:text property=\"password\"/&gt;<br /> &lt;br&gt;&lt;html:submit/&gt;<br /> &lt;/html:form&gt;<br /> &lt;/body&gt;<br /><br /> 代码解析后：<br /> &lt;body&gt;<br /> &lt;form name=\"loginForm\" method=\"post\"  action=\"/myStrutsApp/login.do\"&gt;<br /> User Name: &lt;input type=\"text\" name=\"userName\"  value=\"\"&gt;<br /> &lt;br&gt;Password: &lt;input type=\"text\"  name=\"password\" value=\"\"&gt;<br /> &lt;br&gt;&lt;input type=\"submit\"   value=\"Submit\"&gt;<br /> &lt;/form&gt;<br /> &lt;script language=\"JavaScript\"  type=\"text/javascript\"&gt;<br />  &lt;!--<br />  if (document.forms[\"loginForm\"].elements[\"password\"].type != \"hidden\") <br />       document.forms[\"loginForm\"].elements[\"password\"].focus()<br />  // --&gt;<br /> &lt;/script&gt;<br /><br /> &lt;/body&gt;</td></tr></tbody></table></strong></div>有没有看到这个标签库是如何建立JavaScript来定焦到password元素上的? 这也是该库让人着迷的地方之一。你不用担心如何在客户端进行编程，它会帮你自动生成。<br />还可以看到，&lt;form&gt;标签中method属性的缺省值是POST。<br /><br />&lt;text&gt;标签、&lt;hidden&gt;标签、&lt;textarea&gt;标签、&lt;radio&gt;标签、&lt;checkbox&gt;标签、&lt;submit&gt;标签、&lt;reset&gt;标签：<br />都有一个property属性，最后会被转换成HTML中的name属性，当然还有name和value属性。<br /><br />&lt;password&gt;标签<br /><div><strong><table style="WIDTH: 664px; HEIGHT: 24px" bordercolor="#000000" cellspacing="1" cellpadding="1" bgcolor="#ffffcc" border="1"><tbody><tr><td>  &lt;html:password property=\"password\"  redisplay=\"false\"/&gt;</td></tr></tbody></table></strong></div>该标签中的一个很重要的属性是"redisplay"，它用于重新显示以前输入到这个区域中的值。该属性的缺省值为true。然而，为了使password不能被重新显示，你或许希望将该属性的值设为false。<br /><br />&lt;select&gt;标签和&lt;option&gt;标签：  <strong><div><table style="WIDTH: 663px; HEIGHT: 24px" bordercolor="#000000" cellspacing="1" cellpadding="1" bgcolor="#ffffcc" border="1"><tbody><tr><td> &lt;html:select property=\"color\" size=\"3\"&gt;<br />  &lt;html:option value=\"r\"&gt;red&lt;/html:option&gt;<br />  &lt;html:option value= \"g\"&gt;green&lt;/html:option&gt;<br />  &lt;html:option value= \"b\"&gt;blue&lt;/html:option&gt;<br /> &lt;/html:select&gt;</td></tr></tbody></table><strong></strong></div></strong><strong></strong></li>
												</ol>
												<p>
														<font color="#000000">
																<strong>遗补</strong>：1.)<strong></strong>&lt;html:link&gt;标签</font>
												</p>
												<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
														<p>
																<font color="#000000">forward属性：链接到一个global forward上；action属性：链接到一个action mapping上；<br />href属性：这个链接会转发给控制器，由控制器做决定；page属性：一个相对的链接。<br /><br />用page属性链接到action上：<br /></font>
														</p>
														<table style="WIDTH: 663px; HEIGHT: 56px" bordercolor="#000000" cellspacing="1" cellpadding="1" bgcolor="#ffffcc" border="1">
																<tbody>
																		<tr>
																				<td>  &lt;html:link page="/html-link.do"&gt;<br />   Linking with the page attribute.<br /> &lt;/html:link&gt;</td>
																		</tr>
																</tbody>
														</table>
														<br />
														<font color="#000000">注意，上面的代码中你不必指定web的关联。相反的，如果你使用href属性，你就必须像下面所示指出web的关联(这里的关联就是struts-exercise)：</font>
														<br />
														<table style="WIDTH: 664px; HEIGHT: 56px" bordercolor="#000000" cellspacing="1" cellpadding="1" bgcolor="#ffffcc" border="1">
																<tbody>
																		<tr>
																				<td> &lt;html:link href="/struts-exercise-taglib/html-link.do"&gt;<br />   Using Href<br /> &lt;/html:link&gt;</td>
																		</tr>
																</tbody>
														</table>
														<br />
														<font color="#000000">很明显，当你在相同的web应用程序中做链接是，它比page属性更加好。你也能用href在不同的服务器上创建链接：<br /></font>
														<table style="WIDTH: 663px; HEIGHT: 56px" bordercolor="#000000" cellspacing="1" cellpadding="1" bgcolor="#ffffcc" border="1">
																<tbody>
																		<tr>
																				<td> &lt;html:link href="<a href="http://otherserver/strutsTut/html-link.do">http://otherserver/strutsTut/html-link.do</a>"&gt;<br />  Using Href<br /> &lt;/html:link&gt;</td>
																		</tr>
																</tbody>
														</table>
														<br />
														<font color="#000000">另一种链接到html-link.do的方法是用action属性：<br /></font>
														<table style="WIDTH: 662px; HEIGHT: 56px" bordercolor="#000000" cellspacing="1" cellpadding="1" bgcolor="#ffffcc" border="1">
																<tbody>
																		<tr>
																				<td> &lt;html:link action="/html-link"&gt;<br />  Using Action attribute<br /> &lt;/html:link&gt;</td>
																		</tr>
																</tbody>
														</table>
														<br />
														<font color="#000000">你也可以以硬编码的方式使用参数：</font>
														<br />
														<table style="WIDTH: 663px; HEIGHT: 56px" bordercolor="#000000" cellspacing="1" cellpadding="1" bgcolor="#ffffcc" border="1">
																<tbody>
																		<tr>
																				<td> &lt;html:link page="/htmllink.do?doubleProp=3.3&amp;amp;longProp=32"&gt;<br />   Double and long via hard coded changes<br /> &lt;/html:link&gt;</td>
																		</tr>
																</tbody>
														</table>
														<br />
														<font color="#000000">或者使用paramId, paramName, and paramProperty属性：<br /></font>
														<table style="WIDTH: 660px; HEIGHT: 72px" bordercolor="#000000" cellspacing="1" cellpadding="1" bgcolor="#ffffcc" border="1">
																<tbody>
																		<tr>
																				<td> &lt;html:link page="/html-link.do" paramId="booleanProperty" paramName="testbean" <br />   paramProperty="nested.booleanProperty"&gt;<br />   Boolean via paramId, paramName, and paramValue<br />&lt;/html:link&gt;</td>
																		</tr>
																</tbody>
														</table>
														<br />
														<font color="#000000">解析后的代码：<br /></font>
														<table style="WIDTH: 661px; HEIGHT: 56px" bordercolor="#000000" cellspacing="1" cellpadding="1" bgcolor="#ffffcc" border="1">
																<tbody>
																		<tr>
																				<td> &lt;a href="/struts-exercise-taglib/html-link.do?booleanProperty=false"&gt;<br />    Boolean via paramId, paramName, and paramValue<br /> &lt;/a&gt;</td>
																		</tr>
																</tbody>
														</table>
														<br />
														<font color="#000000">另外，还能使用带name属性的Map来实现传递多个参数：</font>
														<br />
														<table style="WIDTH: 662px; HEIGHT: 200px" bordercolor="#000000" cellspacing="1" cellpadding="1" bgcolor="#ffffcc" border="1">
																<tbody>
																		<tr>
																				<td> &lt;%<br />java.util.HashMap newValues = new java.util.HashMap();<br />newValues.put("floatProperty", new Float(444.0));<br />newValues.put("intProperty", new Integer(555));<br />newValues.put("stringArray", new String[]<br />{ "Value 1", "Value 2", "Value 3" });<br />pageContext.setAttribute("newValues", newValues);<br />%&gt;<br />...<br /> &lt;html:link action="/html-link" name="newValues"&gt;<br />    Float, int, and stringArray via name (Map)<br /> &lt;/html:link&gt;</td>
																		</tr>
																</tbody>
														</table>
														<br />
														<font color="#000000">你也能够链接到Map类型的action上，上面的代码解析后的结果：<br /></font>
														<table bordercolor="#000000" cellspacing="1" cellpadding="1" bgcolor="#ffffcc" border="1">
																<tbody>
																		<tr>
																				<td> &lt;html:messages property="property2" message="true" id="msg" header="messages.header" footer="messages.footer"&gt;<br /> &lt;tr&gt;&lt;td&gt;&lt;%= pageContext.getAttribute("msg") %&gt;&lt;/td&gt;&lt;/tr&gt;<br /> &lt;/html:messages&gt;</td>
																		</tr>
																</tbody>
														</table>
														<p>
																<font color="#000000">2.) select和option标签<br /><strong>&lt;html:select&gt; </strong>的属性：property－与ActionForm中的某个属性对应；size－显示option的数目；multiple－默认为fales，表示不能多选，当设定为true时，property对应的ActionForm的属性必须为数组。<br />&lt;html:select property="name" size=6 multiple="true"&gt;<br /><strong>&lt;html:option&gt;</strong>的属性：key、local、bundle－指定Resource Bundle中的内容。<br />例如 &lt;html:option value="color1"&gt;Orange&lt;/html:option&gt;<br />&lt;html:option value="color1" bundle="htmlselect.Colors" key="htmlselect.red"/&gt;<br />它和配置文件中的&lt;message-resources&gt;元素的key属性匹配 --&gt; &lt;message-resource parmeter="HtmlSelectColors" key="htmlselect.Colors"/&gt;<br />&lt;message-resource&gt;中配置的资源文件为HtmlSelectColors.properties，相关内容为 htmlselect.red=RED<br /><strong>&lt;html:options&gt;</strong>标签，提供了一组&lt;option&gt;元素，在&lt;html:select&gt;元素中可以包含多个&lt;html:options&gt;元素。非常灵活，可以取得集合或数组中的值。<br />例1 &lt;html:options collection="coll" property="value" labelProperty="label" /&gt; 这指在coll的集合中存放了options，value指实际能被提交的值，label是显示给用户的值。<br />例2 &lt;html:options property="value" labelProperty="label" /&gt; collection属性不被指定时，将使用表单相关的form bean，form bean中value属性存放option value，label属性值显示给用户。<br />例3 &lt;html:options name="valueBean" property="values" labelName="labelsBean" labelProperty="labels" /&gt; 这个意思是value值存放在名为valueBean的bean的vlaues属性中，它是一个collection；label值也是同样的意思。<br /><strong>&lt;html:optionsCollection&gt;</strong>标签，和&lt;html:options&gt;的用法很相似。<br />例如 &lt;html:select property="custId"&gt;&lt;html:optionsCollection property="customers" label="name" value="custId" /&gt;&lt;/html:select&gt;<br />这个标签和org.apache.structs.util.LabelValueBean结合的很好，如果把label和value都放到这个对象中，可以很简单的这样应用：<br />&lt;html:select property="custId"&gt;&lt;html:optionsCollection property="customers" /&gt;&lt;/html:select&gt;<br /><br /><br /><br /></font>
																<font color="#ff0000">
																		<strong>&lt;html:messages&gt;的message属性如果不设定为true，会输出ActionErrors中所储存的讯息，Error代表的是一个操作方面的错误，例如错误操作导致使用者名称或密码为空（当然也许也是故意的）。<br /><br />&lt;html:messages&gt;的message属性如果设定为true，会输出ActionMessages中所储存的讯息， Message表示一个提示讯息，也许使用者输入了不正确的资讯，例如在输入名称与密码时打错了字，程式要提示使用者他们输入了不正确的讯息。<br /></strong>
																</font>
														</p>
												</blockquote>
										</div>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/yifeng661/aggbug/71600.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yifeng661/" target="_blank">伊峰</a> 2006-09-24 21:52 <a href="http://www.blogjava.net/yifeng661/articles/71600.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>