﻿<?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-laoding-文章分类-struts </title><link>http://www.blogjava.net/laoding/category/34398.html</link><description>本来我以为，隐身了别人就找不到我，没有用的，像我这样拉风的男人，无论走到哪里，都像在黑暗中的萤火虫一样，那样的鲜明，那样的出众。我那忧郁的眼神，稀疏的胡茬，那微微隆起的将军肚和亲切的笑容......都深深吸引了众人...... </description><language>zh-cn</language><lastBuildDate>Sat, 01 Nov 2008 12:18:31 GMT</lastBuildDate><pubDate>Sat, 01 Nov 2008 12:18:31 GMT</pubDate><ttl>60</ttl><item><title>struts html标签</title><link>http://www.blogjava.net/laoding/articles/238012.html</link><dc:creator>老丁</dc:creator><author>老丁</author><pubDate>Sat, 01 Nov 2008 04:17:00 GMT</pubDate><guid>http://www.blogjava.net/laoding/articles/238012.html</guid><wfw:comment>http://www.blogjava.net/laoding/comments/238012.html</wfw:comment><comments>http://www.blogjava.net/laoding/articles/238012.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/laoding/comments/commentRss/238012.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/laoding/services/trackbacks/238012.html</trackback:ping><description><![CDATA[<span style="color: red">本文来自：http://www.360doc.com/showWeb/0/0/235458.aspx</span><br />
<br />
<p><strong>JSP Struts</strong><strong>之</strong><strong>HTML</strong><strong>标签库详解</strong><strong></strong></p>
<p>Struts提供了五个标签库，即：HTML、Bean、Logic、Template和Nested。 </p>
<table style="background: #ffffcc 0% 50%; width: 480pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial" cellspacing="1" cellpadding="0" width="640" bgcolor="#ffffcc" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>&nbsp;标签库</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>&nbsp;说明</p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>&nbsp;HTML 标签</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>&nbsp;用来创建能够和Struts 框架和其他相应的HTML 标签交互的HTML 输入表单</p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>&nbsp;Bean 标签</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p><clk>&nbsp;在访问JavaBeans 及其属性，以及定义<nobr oncontextmenu="return false" onmousemove="kwM(3)" id="clickeyekey3" onmouseover="kwE(event,3, this)" style="color: #6600ff; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline" onclick="kwC(event,3)" onmouseout="kwL(event,this)">一个</nobr>新的bean 时使用</clk></p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>&nbsp;Logic 标签</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>&nbsp;管理条件产生的输出和对象集产生的循环</p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>&nbsp;Template 标签</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>&nbsp;随着Tiles框架包的出现，此标记已开始减少使用</p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>&nbsp;Nested 标签</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>&nbsp;增强对其他的Struts 标签的嵌套使用的能力</p>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p><strong>标签的公共特征</strong></p>
<p>&nbsp;</p>
<p>使用固定属性名称的Struts 标签：</p>
<table style="background: #ffffcc 0% 50%; width: 490.5pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial" cellspacing="1" cellpadding="0" width="654" bgcolor="#ffffcc" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>&nbsp;属性</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>&nbsp;说明</p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>&nbsp;id</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>&nbsp;命名自定义标签创建时的脚本变量名。</p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>&nbsp;name</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>&nbsp;指出关键字值，在该关键字下可以找到一个存在的bean 。如果给出了scope属性，则仅仅在scope中查找。否则，根据标准的顺序在各种scope中查找：(page, request, session, or application)。</p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>&nbsp;property</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>&nbsp;指出bean 中的某个属性，可以在其中检索值。如果没有标明，则使用对象本身的值。</p>
            </td>
        </tr>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>&nbsp;scope</p>
            </td>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>&nbsp;定义了Bean在哪个范围(page, request, session, or application)中被查找。如果没有标明按顺序查找。脚本变量(见id)将在相同的范围中创建。</p>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>Struts 标签也支持嵌套引用，例如：</p>
<table style="background: #ffffcc 0% 50%; width: 488.2pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial" cellspacing="1" cellpadding="0" width="651" bgcolor="#ffffcc" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; width: 486.8pt; padding-top: 0.75pt" width="649">
            <p>Property="foo.bar.baz"<br />
            <br />
            这相当于进行下面的调用：<br />
            getFoo().getBar().getBaz()；<br />
            <br />
            或者做为setter：<br />
            getFoo().getBar().setBaz(value)；</p>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>虽然Struts 标签的设计原意是为了避免使用scriptlet，scriptlet的表达式还能够提供给所有的Struts 标签使用。但请确保使用完整的表达式:</p>
<table style="background: #ffffcc 0% 50%; margin-left: 1.45pt; width: 477.75pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial" cellspacing="1" cellpadding="0" width="637" bgcolor="#ffffcc" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; width: 476.35pt; padding-top: 0.75pt" width="635">
            <p>&nbsp;错误：<br />
            &nbsp;&lt;html:link href="'&lt;%= "/" + name %&gt;/index.jsp&gt;'&gt;<br />
            &nbsp;<br />
            &nbsp;正确：<br />
            &nbsp;&lt;html:link href="'&lt;%= "/" + name + "/index.jsp" %&gt;'&gt;&nbsp;&nbsp;&nbsp; // 表达式必须提供整个属性值</p>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Html </strong><strong>标签库</strong></p>
<p>&lt;!--[if !supportLists]--&gt;1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--[endif]--&gt;&lt;html&gt;标签<br />
它有两个属性：locale和xhtml，两者都不是必需的。</p>
<table style="background: #ffffcc 0% 50%; margin-left: 36pt; width: 395.25pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial" cellspacing="1" cellpadding="0" width="527" bgcolor="#ffffcc" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>&nbsp;&lt;html:html&nbsp;locale=\"true\"&gt;<br />
            <br />
            &nbsp;此行代码解析后：<br />
            &nbsp;&lt;html&nbsp;lang=\"en\"&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<p>&lt;!--[if !supportLists]--&gt;2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--[endif]--&gt;说明：生成的结果取决于Struts应用程序所位于的服务器的locale。如果你将应用程序部署到一个不同locale的服务器，你不需要改变代码，Locale会自动调整。 </p>
<p>&lt;!--[if !supportLists]--&gt;3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--[endif]--&gt;&lt;base&gt;标签：表示所包含页面的绝对位置。这个标签只有内嵌在head标签中才有效。</p>
<table style="background: #ffffcc 0% 50%; margin-left: 36pt; width: 378.75pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial" cellspacing="1" cellpadding="0" width="505" bgcolor="#ffffcc" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>&nbsp;&lt;html:base/&gt;<br />
            <br />
            &nbsp;此行代码解析后：<br />
            &nbsp;&lt;base&nbsp;href=\"http://www.mymain.com/myStrutsApp/testing.jsp\"&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<p>&lt;!--[if !supportLists]--&gt;4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--[endif]--&gt;&lt;img&gt;标签<br />
最重要的属性page：图象文件的路径，前面必须带有一个斜线。<br />
其它属性：heignt、width、alt。</p>
<table style="background: #ffffcc 0% 50%; margin-left: 36pt; width: 436.5pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial" cellspacing="1" cellpadding="0" width="582" bgcolor="#ffffcc" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>&nbsp;&nbsp;&lt;html:img&nbsp;page=\"/logo.gif\"&nbsp;height=\"50\"&nbsp; width=\"200\"&nbsp;alt=\"Web&nbsp;Logo\"/&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<p>&lt;!--[if !supportLists]--&gt;5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--[endif]--&gt;&lt;link&gt;标签</p>
<table style="background: #ffffcc 0% 50%; margin-left: 36pt; width: 440.25pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial" cellspacing="1" cellpadding="0" width="587" bgcolor="#ffffcc" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>&nbsp;&lt;html:link&nbsp;page=\"/index.html\"&gt;Click&nbsp;demo&lt;/html:link&gt;<br />
            <br />
            &nbsp;此行代码解析后：<br />
            &nbsp;&nbsp;&lt;a&nbsp;href=\"/index.html\"&gt;Click&nbsp;demo&lt;/a&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<p>&lt;!--[if !supportLists]--&gt;6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--[endif]--&gt;&lt;errors&gt;标签：通过一个简单的&lt;html:errors/&gt;标签，你就可以在一个JSP页面上显示完全自定义的错误信息。功能超强大！！<br />
说明：这个标签在Request对象的属性集合中查找reserved&nbsp;key。如果它找到一个reserved&nbsp;key，它就假设这个key是一个String、或是一个String数组&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; （它包含在模块的MessageResources中查找的message&nbsp;keys）、或是类型为org.apache.struts.action.ActionErrors的一个对象。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;如果在应用程序资源中存在相应的信息，那么就可以用下面这些可选的message&nbsp;keys：&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&#183;&nbsp;errors.header&nbsp;&nbsp;or&nbsp; errors.prefix：相应的信息在错误信息的单独列表前显示。&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&#183;&nbsp;errors.footer or&nbsp; errors.suffix：相应的信息在错误信息的单独列表后显示。 </p>
<p>&lt;!--[if !supportLists]--&gt;7.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--[endif]--&gt;&lt;form&gt;标签系列<br />
使用&lt;form&gt;标签时必须遵循一些规则： </p>
<p><clk>&lt;!--[if !supportLists]--&gt;1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--[endif]--&gt;标签中必须包含一个action属性，它是这个标签中唯一必需的属性。如果不具备该属性则JSP页面会抛出一个异常。之后你必须给这个action属性指定一个有效值。一个有效值是指应用程序的Struts配置文件中元素里的任何一<nobr oncontextmenu="return false" onmousemove="kwM(2)" id="clickeyekey2" onmouseover="kwE(event,2, this)" style="color: #6600ff; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline" onclick="kwC(event,2)" onmouseout="kwL(event,this)">个子</nobr>元素的访问路径。而且相应的元素中必须有一个name属性，它的值是form&nbsp;bean的名称。</clk></p>
<table style="background: #ffffcc 0% 50%; margin-left: 1.45pt; width: 468pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial" cellspacing="1" cellpadding="0" width="624" bgcolor="#ffffcc" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; padding-top: 0.75pt">
            <p>&nbsp;&lt;html:form&nbsp;action=\"/login\"&nbsp;&gt;&nbsp;<br />
            <br />
            &nbsp;如果你有上述一个标签&nbsp;，那么你的Struts配置文件的元素中必须有一个如下显示为粗体的元素：&nbsp;<br />
            &lt;action-mappings&gt;&nbsp;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;action&nbsp;path=\"/login\"&nbsp;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type=\"com.javapro.struts.LoginAction\"&nbsp;&nbsp;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name=\"loginForm\"<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scope=\"request\"<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input=\"/login.jsp\"&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;forward&nbsp;name=\"success\"&nbsp;path=\"/mainMenu.jsp\"/&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&lt;/action&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;.<br />
            &nbsp;&nbsp;&nbsp;&nbsp;.<br />
            &nbsp;&nbsp;&nbsp;&nbsp;.<br />
            &lt;/action-mappings&gt;&nbsp; // 这就是说一个form标签是和form&nbsp;bean相关联的。</p>
            </td>
        </tr>
    </tbody>
</table>
<p>&lt;!--[if !supportLists]--&gt;2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--[endif]--&gt;&lt;!--[if !supportEmptyParas]--&gt;&nbsp;&lt;!--[endif]--&gt;</p>
<p>&lt;!--[if !supportLists]--&gt;3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--[endif]--&gt;任何包含在&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&nbsp;bean中有一个指定的属性值。比如，如果你有一个属性值被指定为&#8220;username&#8221;的&lt;text&gt;标签，那么相关的form&nbsp;bean中也必须有一个名为&#8220;username&#8221;的属性。输入&lt;text&gt;标签中的值会被用于生成form&nbsp;bean的userName属性。</p>
<p><br />
&lt;form&gt;标签还有一些不是必须但很有用的&#8220;次要&#8221;属性。<br />
比如，你可以用focus属性来生成JavaScript，它会&#8220;定焦&#8221;（focus）到该form所包含的一个元素上。使用focus属性时你需要给它指定元素的名称。</p>
<table style="background: #ffffcc 0% 50%; margin-left: 1.45pt; width: 468.75pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial" cellspacing="1" cellpadding="0" width="625" bgcolor="#ffffcc" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0.75pt; padding-left: 0.75pt; padding-bottom: 0.75pt; width: 467.35pt; padding-top: 0.75pt" width="623">
            <p>&nbsp;&lt;body&gt;<br />
            &nbsp;&lt;html:form&nbsp;action=\"/login\"&nbsp;focus=\"password\"&gt;<br />
            &nbsp;User&nbsp;Name:&nbsp;&lt;html:text&nbsp;property=\"userName\"/&gt;<br />
            &nbsp;&lt;br&gt;Password:&nbsp;&lt;html:text&nbsp;property=\"password\"/&gt;<br />
            &nbsp;&lt;br&gt;&lt;html:submit/&gt;<br />
            &nbsp;&lt;/html:form&gt;<br />
            &nbsp;&lt;/body&gt;<br />
            <br />
            &nbsp;代码解析后：<br />
            &nbsp;&lt;body&gt;<br />
            &nbsp;&lt;form&nbsp;name=\"loginForm\"&nbsp;method=\"post\"&nbsp; action=\"/myStrutsApp/login.do\"&gt;<br />
            &nbsp;User&nbsp;Name:&nbsp;&lt;input&nbsp;type=\"text\"&nbsp;name=\"userName\"&nbsp; value=\"\"&gt;<br />
            &nbsp;&lt;br&gt;Password:&nbsp;&lt;input&nbsp;type=\"text\"&nbsp; name=\"password\"&nbsp;value=\"\"&gt;<br />
            &nbsp;&lt;br&gt;&lt;input&nbsp;type=\"submit\"&nbsp; &nbsp;value=\"Submit\"&gt;<br />
            &nbsp;&lt;/form&gt;<br />
            &nbsp;&lt;script&nbsp;language=\"JavaScript\"&nbsp; type=\"text/javascript\"&gt;<br />
            &nbsp;&nbsp;&lt;!--<br />
            &nbsp; if&nbsp;(document.forms[\"loginForm\"].elements[\"password\"].type&nbsp;!=&nbsp;\"hidden\")&nbsp;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.forms[\"loginForm\"].elements[\"password\"].focus()<br />
            &nbsp;&nbsp;//&nbsp;--&gt;<br />
            &nbsp;&lt;/script&gt;<br />
            <br />
            &nbsp;&lt;/body&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<p>有没有看到这个标签库是如何建立JavaScript来定焦到password元素上的?&nbsp;这也是该库让人着迷的地方之一。你不用担心如何在客户端进行编程，它会帮你自动生成。<br />
还可以看到，&lt;form&gt;标签中method属性的缺省值是POST。</p>
<img src ="http://www.blogjava.net/laoding/aggbug/238012.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/laoding/" target="_blank">老丁</a> 2008-11-01 12:17 <a href="http://www.blogjava.net/laoding/articles/238012.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts logic标签</title><link>http://www.blogjava.net/laoding/articles/238008.html</link><dc:creator>老丁</dc:creator><author>老丁</author><pubDate>Sat, 01 Nov 2008 03:39:00 GMT</pubDate><guid>http://www.blogjava.net/laoding/articles/238008.html</guid><wfw:comment>http://www.blogjava.net/laoding/comments/238008.html</wfw:comment><comments>http://www.blogjava.net/laoding/articles/238008.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/laoding/comments/commentRss/238008.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/laoding/services/trackbacks/238008.html</trackback:ping><description><![CDATA[<span style="color: red">&nbsp;&nbsp;&nbsp;&nbsp;<strong>1.&nbsp; logic:empty</strong> </span>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;该标签是用来判断是否为空的。如果为空，该标签体中嵌入的内容就会被处理。该标签用于以下情况：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1）当Java对象为null时；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2）当String对象为""时； </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3）当java.util.Collection对象中的isEmpty()返回true时；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4）当java.util.Map对象中的isEmpty()返回true时。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;logic:empty &nbsp; name="user"&gt;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/logic:empty&gt;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;该句等同于：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if &nbsp; (user.isEmpty()) &nbsp; {&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />
<strong>&nbsp;&nbsp; <font color="#ff0000">2.&nbsp; logic:notEmpty</font></strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 该标签的应用正好和logic:empty标签相反，略。<br />
<strong>&nbsp;&nbsp;<font color="#ff0000"> 3. logic:equal</font></strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 该标签为等于比较符。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eg1.&nbsp;比较用户的状态属性是否1，若为1，输出"启用";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;logic:equal &nbsp; name="user" &nbsp; property="age" &nbsp; value="18"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;已经成年<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/logic:equal&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eg2.&nbsp;如果上例中的value值是动态获得的，例如需要通过bean:write输出，因struts不支持标签嵌套，可采用EL来解决该问题。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;logic:equal &nbsp; name="user" &nbsp; property="age" &nbsp; value="${user.age}"&gt;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ......<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/logic:equal&gt;<br />
<font color="#ff0000">&nbsp;</font><strong><font color="#ff0000">&nbsp;&nbsp;&nbsp;4. logic:notEqual</font><br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;该标签意义与logic:equal相反，使用方法类似，略。<br />
<strong>&nbsp;&nbsp;&nbsp;<font color="#ff0000">&nbsp;5. logic:forward<br />
</font></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 该标签用于实现页面导向，查找配置文件的全局forward。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eg. &lt;logic:forward name="login"/&gt;<br />
<strong>&nbsp;&nbsp;&nbsp; <font color="#ff0000">6. logic:greaterEqual</font></strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为大于等于比较符。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eg.&nbsp;当某人的年龄大于等于18时，输出&#8220;已经成年&#8221;：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;logic:greaterEqual name="user" property="age" value="18"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;已经成年<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/logic:greaterEqual&gt; <font size="3"><font color="#000000" size="2"><br />
<strong>&nbsp;&nbsp;&nbsp; <font color="#ff0000">7. logic:greaterThan</font></strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font> 此为大于比较符，使用方法同logic:greaterEqual，略;<br />
<font size="3"><font color="#000000" size="2"><strong><font color="#ff0000">&nbsp;&nbsp;&nbsp; 8. logic:lessEqual</font></strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font>此为小于等于比较符，使用方法同logic:greaterEqual,略;<font size="3"><font color="#000000" size="2"><br />
<strong>&nbsp;&nbsp;&nbsp;<font color="#ff0000"> 9. logic:lessThan</font></strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font>此为小于比较符，使用方法同logic:greaterEqual,略;<font size="3"><font color="#000000" size="2"><br />
<strong>&nbsp;&nbsp;<font color="#ff0000">&nbsp; 10. logic:match</font></strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font>此标签比较对象是否相等；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eg1. 检查在request范围内的name属性是否包含"laoding"串：&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;logic:match name="name" scope="request" value="laoding"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean:write name="name"/&gt;中有一个&#8220;laoding&#8221;串。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/logic:match&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eg2. 检查在request范围内的name属性是否已&#8220;laoding&#8221;作为起始字符串：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;logic:match name="name" scope="request" value="laoding" location="start"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean:write name="name"/&gt;以&#8220;laoding&#8221;作为起始字符串。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/logic:match&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eg3.&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;logic:match header="user-agent" value="Windows"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你运行的是Windows系统<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/logic:match&gt;<br />
<strong><font color="#000000" size="2"><font size="3"><font color="#ff0000">&nbsp;&nbsp;&nbsp; </font></font></font><font color="#ff0000">11. &nbsp;logic:notMatch</font></strong></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 此标签用于比较对象是否不相同，与logic:match意义相反，使用方法类似，略。<br />
<font color="#ff0000">&nbsp;&nbsp;&nbsp;&nbsp; <strong>12. logic:messagePresent</strong></font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 该标签用于判断ActionMessages/ActionErrors对象是否存在；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eg.&nbsp;如果存在error信息，将其全部输出：<br />
<font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;logic:messagePresent property="error"&gt;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;html:messages property="error" id="errMsg" &gt;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean:write name="errMsg"/&gt;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/html:messages&gt;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/logic:messagePresent &gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff0000"><strong>13. logic:messagesNotPresent</strong></font><br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 该标签用于判断ActionMessages/ActionErrors对象是否不存在,使用方法与logic:messagePresent类似，略<br />
<strong><font color="#ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14. logic:present</font></strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 此标签用于判断request对象传递参数是否存在。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;eg1. user对象和它的name属性在request中都存在时，输出相应字符串：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;logic:present name="user" property="name"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user对象和该对象的name属性都存在<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/logic:present&gt;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eg2. 若有一个名字为&#8220;user&#8221;的JavaBean，输出对应字符串：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;logic:present name="user" &gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有一个名字为&#8220;user&#8221;的JavaBean。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/logic:present&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eg3.&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;logic:present header="user-agent"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;we got a user-agent header.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/logic:present&gt;<br />
&nbsp;&nbsp;<strong>&nbsp;&nbsp;&nbsp; <font color="#ff0000">15. logic:notPresent</font></strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 此标签用于判断request对象传递参数是否不存在，意义与了logic:present相反，使用方法类似，略。<br />
&nbsp;&nbsp;<strong>&nbsp;&nbsp;<font color="#ff0000">&nbsp; 16. logic:redirect</font></strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 该标签用于实现页面转向，可传递参数。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eg1. &lt;logic:redirect href="<u><font color="#638f27"><a href='http://www.blogjava.net/laoding"/'>http://<u><font color="#638f27">www.blogjava.net/laoding</font></u>"/</a></font></u>&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff0000">17. logic:iterator</font></strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用于显示列表为collection的值（List ,ArrayList,HashMap等）。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eg1.&nbsp;逐一输出用户列表(userlList)中用户的姓名：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;logic:iterate&nbsp; id="user" name="user"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean:write name="user" property="name"/&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/logic:iterate&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eg2.&nbsp;从用户列表中输出从1开始的两个用户的姓名<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;logic:iterate&nbsp; id="user" name="user" indexId="index"&nbsp; offset="1" length="2"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean:write name="index"/&gt;.&lt;bean:write name="user" property="name"/&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/logic:iterate&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eg3. logic:iterator标签的嵌套<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;logic:iterate id="user" indexId="index" name="user"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean:write name="index"/&gt;. &lt;bean:write name="user" property="name"/&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;logic:iterate id="address" name="user" property="addressList" length="3" offset="1"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean:write name="address"/&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/logic:iterate&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/logic:iterate&gt;</p>
<img src ="http://www.blogjava.net/laoding/aggbug/238008.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/laoding/" target="_blank">老丁</a> 2008-11-01 11:39 <a href="http://www.blogjava.net/laoding/articles/238008.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts bean标签</title><link>http://www.blogjava.net/laoding/articles/238007.html</link><dc:creator>老丁</dc:creator><author>老丁</author><pubDate>Sat, 01 Nov 2008 03:31:00 GMT</pubDate><guid>http://www.blogjava.net/laoding/articles/238007.html</guid><wfw:comment>http://www.blogjava.net/laoding/comments/238007.html</wfw:comment><comments>http://www.blogjava.net/laoding/articles/238007.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/laoding/comments/commentRss/238007.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/laoding/services/trackbacks/238007.html</trackback:ping><description><![CDATA[这个标签库中包含用于定义新bean、访问bean及其属性的标签。Struts框架提供了多种自定义标签用来在JSP页中处理JavaBean。这些标签被封装在一个普通的标签库中，在文件struts-bean.tld中定义了它的标签库描述器。Bean标签库将标记定义在四个子类别中：<br />
1.创建和复制bean的标记<br />
2.脚本变量定义标记<br />
3.bean显示标记<br />
4.消息国际化标记<br />
<br />
一.Bean复制标记<br />
<br />
可定义新bean，可复制现有bean，还可从现有bean复制属性。<br />
&lt;bean:define&gt;标记用来：<br />
定义新字符串常数<br />
将现有的bean复制到新定义的bean对象<br />
复制现有bean的属性来创建新的bean<br />
例如：定义一个bean:<br />
&lt;bean:define id=&#8221;test&#8221;value=&#8221;this is a test&#8221;/&gt;<br />
源bean在页作用域中被拷贝请求作用域中的另一个bean:<br />
&lt;bean:define id=&#8221;targetBean&#8221;name=&#8221;sourceBean&#8221;<br />
scope=&#8221;page&#8221;toScope=&#8221;request&#8221;/&gt;<br />
<br />
二.定义脚本变量的标记<br />
<br />
从多种资源中定义和生成脚本变量，这些资源包括cookie,请求参数，HTTP标头等等。<br />
<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"><span style="color: #000000">属性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;描述<br />
Id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;脚本变量和要定义的页作用域属性的名称<br />
Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cookie</span><span style="color: #000000">/</span><span style="color: #000000">标头</span><span style="color: #000000">/</span><span style="color: #000000">参数的名称<br />
multiple&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果这个属性设置了任意一个数值，所有匹配的cookie都会被积累并存储到一个Cookie&nbsp;[](一个数组)类型的bean里。若无设置，指定cookie的第一个值将作为Cookie类型的值<br />
Value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果没有匹配的cookie或数值，就返回这个属性指定的默认值</span></div>
<br />
例如：<br />
&lt;bean:cookie id=&#8221;myCookie&#8221;name=&#8221;userName&#8221;/&gt;<br />
脚本变量名称是myCookie，用来创建这个属性的cookie的名称是userName。<br />
&lt;bean:header id=&#8221;myHeader&#8221;name=&#8221;Accept-Language&#8221;/&gt;<br />
脚本变量名称是myHeader,请求标头的名称是Accept-Language.<br />
&lt;bean:parameter id=&#8221;myParameter&#8221;name=&#8221;myParameter&#8221;&gt;<br />
脚本变量名称是myPatameter,它保存的请求参数的名称也是myParameter.<br />
&lt;bean:include&gt;标记将对一个资源的响应进行检索，并引入一个脚本变量和字符串类型的页作用域属性。这个资源可以是一个页，一个ActionForward或一个外部URL。与&lt;jsp:include&gt;的不同是资源的响应被存储到一个页作用域的bean中，而不是写入到输出流。属性如下：<br />
<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"><span style="color: #000000">属性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;描述<br />
Id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;脚本变量和要定义的页作用域属性的名称<br />
Page&nbsp;&nbsp;&nbsp;&nbsp;一个内部资源forward一个ActionForward<br />
Href&nbsp;&nbsp;&nbsp;&nbsp;要包含的资源的完整URL</span></div>
<br />
例如：&lt;bean:include id=&#8221;myInclude&#8221;page=&#8221;MyJsp?x=1&#8221;/&gt;脚本变量的名称是myInclude，要检索的响应来自资源MyJsp?x=1。<br />
<br />
三.显示BeanBean属性<br />
<br />
标记库中定义了&lt;bean:write&gt;标记，用来将bean的属性输送到封装的JSP页写入器。这个标记与&lt;jsp:getProperty&gt;类似，属性如下：<br />
<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"><span style="color: #000000">属性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;描述<br />
Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;要进行属性显示的bean的名称<br />
property&nbsp;&nbsp;要显示的属性的名称。如果这个属性类有java.beans.PropertyEditor,getAsText()或toString方法会被调用<br />
Scope&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bean的作用域，若没有设置，搜索范围是从页到应用程序作用域<br />
Filter&nbsp;&nbsp;&nbsp;&nbsp;如果设置true,属性中的所有特殊HTML字符都将被转化为相应的实体引用<br />
Ignore&nbsp;&nbsp;&nbsp;&nbsp;如果设置false，当发现属性时会产生一个请求时间异常，否则返回null</span></div>
<br />
例如：&lt;bean:write name=&#8221;myBean&#8221;property=&#8221;myProperty&#8221;scope=&#8221;request&#8221;filter=&#8221;true&#8221;/&gt;myBean的属性myProperty将会被显示，作用域为请求，如果发现任何HTML特殊字符都将被转化为相应的实体引用。<br />
<br />
四.消息标记和国际化<br />
<br />
struts框架支持国际化和本地化。用户在他们的计算机中定义自己所在的区域，当web应用程序需要输出一条消息时，它将引用一个资源文件，在这个文件中所有的消息都使用了适当的语言。一个应用程序可能提供了很多资源文件，每个文件提供了用不同语言编写的消息。如果没有找到所选语言的资源文件，就将使用默认的资源文件。<br />
struts框架对国际化的支持是使用&lt;bean:message&gt;标记，以及使用java.util数据包中定义的Locale和ResourceBundle类来实现Java2平台对这些任务的支持。Java.text.MessageFormat类定义的技术可以支持消息的格式。利用此功能，开发人员不需了解这些类的细节就可进行国际化和设置消息的格式。<br />
<br />
 <img src ="http://www.blogjava.net/laoding/aggbug/238007.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/laoding/" target="_blank">老丁</a> 2008-11-01 11:31 <a href="http://www.blogjava.net/laoding/articles/238007.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts常见错误及原因分析</title><link>http://www.blogjava.net/laoding/articles/228396.html</link><dc:creator>老丁</dc:creator><author>老丁</author><pubDate>Thu, 11 Sep 2008 08:46:00 GMT</pubDate><guid>http://www.blogjava.net/laoding/articles/228396.html</guid><wfw:comment>http://www.blogjava.net/laoding/comments/228396.html</wfw:comment><comments>http://www.blogjava.net/laoding/articles/228396.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/laoding/comments/commentRss/228396.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/laoding/services/trackbacks/228396.html</trackback:ping><description><![CDATA[<font face="arial,sans-serif" color="#000000">1&nbsp;异常&nbsp;javax.servlet.jsp.JspException:&nbsp;Cannot&nbsp;retrieve&nbsp;mapping&nbsp;for&nbsp;action&nbsp;/Login&nbsp;（/Login是你的action名字）&nbsp;<br />
可能原因:action没有再struts-config.xml&nbsp;中定义，或没有找到匹配的action，例如在JSP文件中使用&nbsp;<HTML:FORM&NBSP;ACTION="LOGIN.DO".将表单提交给LOGIN.DO<BR>
处理:如果出现上述异常，请查看struts-config.xml中的定义部分，有时可能是打错了字符或者是某些不符合规则，可以使用struts&nbsp;console工具来检查。&nbsp;<br />
<br />
2&nbsp;异常&nbsp;org.apache.jasper.JasperException:&nbsp;Cannot&nbsp;retrieve&nbsp;definition&nbsp;for&nbsp;form&nbsp;bean&nbsp;null&nbsp;<br />
&nbsp;<br />
可能原因:&nbsp;&nbsp;这个异常是因为Struts根据struts-config.xml中的mapping没有找到action期望的form&nbsp;bean。大部分的情况可能是因为在form-bean中设置的name属性和action中设置的name属性不匹配所致。换句话说，action和form都应该各自有一个name属性，并且要精确匹配，包括大小写。这个错误当没有name属性和action关联时也会发生，如果没有在action中指定name属性，那么就没有name属性和action相关联。当然当action制作某些控制时，譬如根据参数值跳转到相应的jsp页面，而不是处理表单数据，这是就不用name属性，这也是action的使用方法之一。<br />
<br />
3&nbsp;异常&nbsp;No&nbsp;action&nbsp;instance&nbsp;for&nbsp;path&nbsp;/xxxx&nbsp;could&nbsp;be&nbsp;created&nbsp;<br />
&nbsp;<br />
可能原因&nbsp;<br />
&nbsp;特别提示：因为有很多中情况会导致这个错误的发生，所以推荐大家调高你的web服务器的日志/调试级别，这样可以从更多的信息中看到潜在的、在试图创建action类时发生的错误，这个action类你已经在struts-config.xml中设置了关联（即添加了<action>标签）。&nbsp;<br />
&nbsp;<br />
在struts-config.xml中通过action标签的class属性指定的action类不能被找到有很多种原因，例如：&nbsp;<br />
<br />
定位编译后的.class文件失败。Failure&nbsp;to&nbsp;place&nbsp;compiled&nbsp;.class&nbsp;file&nbsp;for&nbsp;the&nbsp;action&nbsp;in&nbsp;the&nbsp;classpath&nbsp;(在web开发中，class的的位置在r&nbsp;WEB-INF/classes，所以你的action&nbsp;class必须要在这个目录下。例如你的action类位于WEB-INF/classes/action/Login.class,那么在struts-config.xml中设置action的属性type时就是action.Login).&nbsp;<br />
拼写错误，这个也时有发生，并且不易找到，特别注意第一个字母的大小写和包的名称。&nbsp;<br />
&nbsp;<br />
在struts-config.xml中指定的action类没有继承自Stuts的Action类，或者你自定义的Action类没有继承自Struts提供的Action类。&nbsp;<br />
<br />
你的action类必须继承自Struts提供的Action类。&nbsp;<br />
&nbsp;<br />
你的classpath的问题。例如web&nbsp;server没有发现你的资源文件，资源文件必须在WEB-INF/classes/目录下。&nbsp;<br />
&nbsp;<br />
4&nbsp;异常&nbsp;javax.servlet.jsp.JspException:&nbsp;No&nbsp;getter&nbsp;method&nbsp;for&nbsp;property&nbsp;username&nbsp;of&nbsp;bean&nbsp;org.apache.struts.taglib.html.BEAN&nbsp;<br />
&nbsp;<br />
可能原因&nbsp;<br />
&nbsp;没有位form&nbsp;bean中的某个变量定义getter&nbsp;方法&nbsp;<br />
&nbsp;<br />
这个错误主要发生在表单提交的FormBean中，用struts标记
<HTML:TEXT&NBSP;PROPERTY=&#8221;USERNAME&#8221;>
时，在FormBean中必须有一个getUsername()方法。注意字母&#8220;U&#8221;。&nbsp;<br />
5&nbsp;Exception&nbsp;&nbsp;javax.servlet.jsp.JspException:&nbsp;Cannot&nbsp;find&nbsp;ActionMappings&nbsp;or&nbsp;ActionFormBeans&nbsp;collection&nbsp;<br />
&nbsp;<br />
可能原因&nbsp;<br />
&nbsp;不是标识Struts&nbsp;actionServlet的<servlet>标记就是映射.do扩展名的<sevlet-mapping>标记或者两者都没有在web.xml中声明。&nbsp;<br />
&nbsp;<br />
在struts-config.xml中的打字或者拼写错误也可导致这个异常的发生。例如缺少一个标记的关闭符号/&gt;。最好使用struts&nbsp;console工具检查一下。&nbsp;<br />
&nbsp;<br />
另外，load-on-startup必须在web.xml中声明，这要么是一个空标记，要么指定一个数值，这个数值用来表servlet运行的优先级，数值越大优先级越低。&nbsp;<br />
&nbsp;<br />
还有一个和使用load-on-startup有关的是使用Struts预编译JSP文件时也可能导致这个异常。&nbsp;<br />
<br />
6&nbsp;Exception&nbsp;<br />
&nbsp;javax.servlet.jsp.JspException:&nbsp;Cannot&nbsp;find&nbsp;bean&nbsp;org.apache.struts.taglib.html.BEAN&nbsp;in&nbsp;any&nbsp;scope&nbsp;<br />
&nbsp;Probable&nbsp;Causes&nbsp;<br />
&nbsp;试图在Struts的form标记外使用form的子元素。这常常发生在你在
</HTML:FORM&NBSP;ACTION="LOGIN.DO".将表单提交给LOGIN.DO<BR>
后面使用Struts的html标记。<br />
<br />
另外要注意可能你不经意使用的无主体的标记，如
<HTML:FORM&NBSP;&#8230;&NBSP;>
</HTML:FORM&NBSP;&#8230;&NBSP;>
，这样web&nbsp;服务器解析时就当作一个无主体的标记，随后使用的所有标记都被认为是在这个标记之外的，如又使用了
<HTML:TEXT&NBSP;PROPERTY=&#8221;ID&#8221;>
<br />
<br />
还有就是在使用taglib引入HTML标记库时，你使用的prefix的值不是html。<font face="Arial" size="3"><!--BlogUser:itzealot--><!--BlogType:10--></font></font>
</HTML:TEXT&NBSP;PROPERTY=&#8221;ID&#8221;>
</HTML:TEXT&NBSP;PROPERTY=&#8221;USERNAME&#8221;>
<img src ="http://www.blogjava.net/laoding/aggbug/228396.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/laoding/" target="_blank">老丁</a> 2008-09-11 16:46 <a href="http://www.blogjava.net/laoding/articles/228396.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习使用DispatchAction</title><link>http://www.blogjava.net/laoding/articles/227252.html</link><dc:creator>老丁</dc:creator><author>老丁</author><pubDate>Fri, 05 Sep 2008 08:22:00 GMT</pubDate><guid>http://www.blogjava.net/laoding/articles/227252.html</guid><wfw:comment>http://www.blogjava.net/laoding/comments/227252.html</wfw:comment><comments>http://www.blogjava.net/laoding/articles/227252.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/laoding/comments/commentRss/227252.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/laoding/services/trackbacks/227252.html</trackback:ping><description><![CDATA[&nbsp;DispatchAction继承自Action类，它是一个抽象类，封装了一些基础方法，来解决使用一个Action处理多个操作的能力，这就是&nbsp;DispatchAction最大的用途，它可以帮助我们用一个Action类，封装一套类似的操作方法，节省了类的数目，同时也减轻了后期维护的困难。<br />
<br />
DispatchAction中主要包括一下几个方法：<br />
<br />
protected&nbsp;ActionForward&nbsp;dispatchMethodprotected&nbsp;java.lang.reflect.Method&nbsp;getMethodprotected&nbsp;java.lang.String&nbsp;getMethodName<br />
DispatchAction在配置上于标准的Action稍有不同，就是要在Action配置中多一个parameter属性，这个属性将指导DispatchAction找到对应的方法，例如这样配置：<br />
<br />
<br />
&lt;action&nbsp;path="/user"&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type="org.apache.struts.actions.DispatchAction"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name="UserForm"&nbsp;scope="request"&nbsp;input="/test.jsp"&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parameter="status"/&gt;<br />
<br />
parameter&nbsp;的属性值是可以任意起的，在传参数的时候统一就可以了。我写了一个类似这样的Action，它继承自DispatchAction类，包含&nbsp;了三个操作方法，有insert(),update(),delete()。当我想要调用这个Action的insert操作时，提交的地址应该类似这样的：<br />
<br />
<a href="http://localhost:8080/myssh/user.do?status=insert">http://localhost:8080/myssh/user.do?status=insert</a><br />
<br />
就是这么简单，省了好多代码，至少以前的多个类文件变成了现在一个类了，而且在后期维护的时候感觉也是方便很多。<br />
<br />
需要注意的是：在调用DispatchAction的时候method参数是不能为空的，如果空，DispatchAction会调用unspecified方法并抛出异常。<br />
 <img src ="http://www.blogjava.net/laoding/aggbug/227252.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/laoding/" target="_blank">老丁</a> 2008-09-05 16:22 <a href="http://www.blogjava.net/laoding/articles/227252.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>