﻿<?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-似水流年-文章分类-Struts</title><link>http://www.blogjava.net/huhu/category/9539.html</link><description>Huhu'Blog</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 08:20:08 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 08:20:08 GMT</pubDate><ttl>60</ttl><item><title>利用StrutsTestCase测试Struts应用程序【转载】</title><link>http://www.blogjava.net/huhu/articles/43257.html</link><dc:creator>似水流年</dc:creator><author>似水流年</author><pubDate>Wed, 26 Apr 2006 05:47:00 GMT</pubDate><guid>http://www.blogjava.net/huhu/articles/43257.html</guid><wfw:comment>http://www.blogjava.net/huhu/comments/43257.html</wfw:comment><comments>http://www.blogjava.net/huhu/articles/43257.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huhu/comments/commentRss/43257.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huhu/services/trackbacks/43257.html</trackback:ping><description><![CDATA[
		<center>
				<span style="FONT-SIZE: 20px">
						<b>利用StrutsTestCase测试Struts应用程序</b>
				</span>
		</center>
		<br />
		<br />
		<br />
		<br />作者:叶枫(<a href="http://blog.matrix.org.cn/page/叶枫" target="_new">http://blog.matrix.org.cn/page/叶枫</a>)<br />原文:[http://www.matrix.org.cn/resource/article/44/44008_StrutsTestCase.html]http://www.matrix.org.cn/resource/article/44/44008_StrutsTestCase.html[/url]<br />关键字:Struts StrutsTestCase<br /><br /><br /><b><span style="FONT-SIZE: 16px">一、Struts测试概述</span></b><br />  <br />  一个具有良好系统架构的J2EE应用程序至少有三层组成,即表现层,商业层和系统<br />集成层(包括数据存取以及和其他系统集成),目前,Struts是应用比较广泛,实现MVC2模式应用于表现层的一种技术. 在这里面,Struts Action主要用来完成一些简单的数据校验,转换,以及流程转发控制(注意:这里流程不是业务规则). 因此在对整个应用程序进行测试时,我们同时也要测试Struts Action. <br /><br />  但是,测试Struts Action相对测试简单的JavaBean是比较困难,因为Struts是运行在Web服务器中, 因此要测试Struts Action就必须发布应用程序然后才能测试. 我们想象一下,对于一个拥有上千个JSP page和数百甚至数千Java Classes的大规模应用程序,要把他们发布到诸如Weblogic之类的应用服务器再测试,需要多少的时间和硬件资源? 所以这种模式的测试是非常费时费力的.<br /><br />  所以,如果有一种办法能够不用发布应用程序,不需要Web服务器就能象测试普通Java Class一样测试Struts Action,那就能极大地加强Struts的可测试性能,使应用程序测试更为容易,简单快速. 现在这个工具来了,这就是StrutsTestCase.<br /><br /><br /><b><span style="FONT-SIZE: 16px">二、StrutsTestCase 概述</span></b><br /><br />  StrutsTestCase 是一个功能强大且容易使用的Struts Action开源测试工具,<br />它本身就是在大名鼎鼎的JUnit基础上发展起来的。因此通过和JUnit结合<br />使用能极大加强应用程序的测试并加快应用程序的开发.<br />  <br />  StrutsTestCase提供了两者测试方式,模仿方式和容器测试方式. 所谓模仿方式就是有StrutsTestCase本身来模拟Web服务器. 而容器测试方式则需要Web服务器. 本文要讨论的是前者,原因很简单，不需要Web服务器就能象测试普通的Java Class一样测试Struts Action.<br /><br /><br /><b><span style="FONT-SIZE: 16px">三、准备StrutsTestCase和Struts Action/ActionForm/Config</span></b><br /><br />  StrutsTestCase是一个开源工具,可以到http://strutstestcase.sourceforge.net下载. 目前最新版本是2.1.3,<br />如果你使用Servlet2.3就下载StrutsTestCase213-2.3.jar,使用Servlet2.4的就下载StrutsTestCase213-2.4.jar.<br />另外StrutsTestCase本身就是从JUnit继承的,所以你还需要下载JUnit3.8.1.<br /><br />  在本文中,我们用一个简单的例子来做测试. 假设我们有一张表Hotline(country varchar2(50),pno varchar2(50)),<br />我们要做的是根据输入条件从这张表检索相应的记录.检索条件是country. <br /><br /><span style="COLOR: red">Value Object:</span>  <br /><pre class="overflow" title="pre code">package sample;      <br />      public class HotlineDTO implements Serializable{<br />        private String country = "";<br />       private String pno = "";        <br />        /**<br />         * Method HotlineActionForm<br />         *<br />         *<br />         */<br />        public HotlineDTO () {<br />             super();<br />      }<br /><br />        <br />        public void setCountry(String country) {<br />                this.country = country; <br />        }<br /><br />        public void setPno(String pno) {<br />                this.pno = pno; <br />        }<br /><br />        public String getCountry() {<br />                return (this.country); <br />        }<br /><br />        public String getPno() {<br />                return (this.pno); <br />        }        <br />      }</pre><br /><br /><span style="COLOR: red">ActionForm:</span><br />      <pre class="overflow" title="pre code">package sample;<br />      import org.apache.struts.action.ActionForm;<br />      public class HotlineActionForm extends ActionForm{<br />        private String country = "";<br />        private String pno = "";        <br />        /**<br />         * Method HotlineActionForm<br />         *<br />         *<br />         */<br />        public HotlineActionForm() {<br />                super();<br />        }<br /><br />        <br />        public void setCountry(String country) {<br />                this.country = country; <br />        }<br /><br />        public void setPno(String pno) {<br />                this.pno = pno; <br />        }<br /><br />        public String getCountry() {<br />                return (this.country); <br />        }<br /><br />        public String getPno() {<br />                return (this.pno); <br />        }        <br />      }<br />  </pre><br /><br /><span style="COLOR: red">Action Class:</span><br /><pre class="overflow" title="pre code"><br />     public class SearchHotlineAction extends Action {<br />     public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,<br />      HttpServletResponse response) throws Exception {<br />        String target = "";<br />        try{<br />         //调用HotlineDAO检索hotline<br />         String country=((HotlineActionForm)form).getCountry();<br />         List hotlineList = HotlineDAO.getHotlineList(country);<br />         if(hotlineList!=null &amp;&amp; hotlineList.size()&gt;0){<br />            request.setAttribute("hotlineList",hotlineList);<br />            target = "hotlineList";<br />         }else{<br />            target = "notfound";<br />         }<br />        }catch(Exception ex){<br />           ....<br />        }<br />                <br />        <br />     }</pre><br /><br /><span style="COLOR: red">Struts Config:</span><br />  <pre class="overflow" title="pre code">&lt;struts-config&gt;<br />   <br />   &lt;form-beans&gt;<br />     &lt;form-bean name="hotlineActionForm" type="sample.HotlineActionForm" /&gt;<br />       .......<br />   &lt;/form-beans&gt;<br />  &lt;action-mappings&gt;<br />     &lt;action path="/SearchHotline"<br />           name="hotlineActionForm"<br />           type="sample.SearchHotlineAction "<br />                     scope="request"                                   <br />                   validate="false"&gt; <br />      &lt;forward name="hotlineList" path="/hotlineList.jsp"/&gt;        <br />      &lt;forward name="notfound" path="/searchHotline.jsp"/&gt;<br />   &lt;/action&gt;<br />    .....<br />  &lt;action-mappings&gt;<br />   ........<br /> &lt;struts-config&gt;</pre><br /><br /><b><span style="FONT-SIZE: 16px">四、初试StrutsTestCase</span></b><br /><br />    当采用模拟方式时,所有的StrutsTestCase测试Class都是从MockStrutsTestCase继承下来的.<br />    下面我们就创建一个最简单的测试Class.<br />    <pre class="overflow" title="pre code">public class SearchHotlineAction extends MockStrutsTestCase {<br /><br />     public void setUp()throws Exception{<br />     }<br /><br />     public void tearDown()throws Exception{<br />     }<br /><br />    public void testSearchHotline() throws Exception{<br />    setRequestPathInfo("/SearchHotline.do");<br />    addRequestParameter("country", "CN");<br />    actionPerform();<br />    }<br />    }</pre><br /><br />   上面的Class相信用过JUnit的朋友都很熟悉. <br />    好了,一个简单的测试例子就完成了,如果你用的是Eclipse就选择Run-Run...-JUnit-New就可以直接运行.不需要发布你的程序,不需要任何的Web服务器支持,就可以测试Struts Action,这就是StrutsTestCase带来的好处.下面简单地介绍一下它是怎么工作的.<br /><br />    在上面的例子中,我们调用setRequestPathInfo()告诉StrutsTestCase我们要模拟JSP调用SearchHotline.do这个Action,并且调用addRequestParameter()增加了一个参数country.最后调用actionPerform()运行.<br /><br />看到这里,大家发现一个问题没有? 在上面Action的源代码里我们是通过<br /><br /><pre class="overflow" title="pre code">String country=((HotlineActionForm)form).getCountry();</pre><br /><br />也就是ActionForm来取得输入的参数值,可我们在testSearchHotline()方法里并没有设置ActionForm?<br /><br />那么它是怎么出来的呢? 其实大家如果熟悉Struts的运行流程的话就知道,JSP接受用户的输入并发请求时<br />都是类似这样的http://hostname/servletName?param1=value1&amp;param2=value2. 只是Struts接受到这些<br />参数后再根据Struts Config里的Action和ActionForm的映射把他们转为ActionForm后传给Action的.<br /><br />   在上面的例子,我们只是简单地运行了Action,那么Action是否正确执行以及返回的结果是不是我们想要的呢?<br /><br />我们继续完善一下testSearchHotline()这个Method.<br /><br /><span style="COLOR: navy">public void testSearchHotline() throws Exception{<br />    setRequestPathInfo("/SearchHotline.do");<br />    addRequestParameter("country", "CN");<br />    actionPerform();<br />    verifyNoActionErrors();<br />    verifyForward("hotlineList");<br />    assertNotNull(request.getAttribute("hotlineList"));<br />    List hotlineList = (List) request.getAttribute("hotlineList"); <br />    for (Iterator it = hotlineList.iterator();it.hasNext();){<br />     ....<br />    }<br />    }</span><br /><br />我们在actionPerform()后增加了几行语句来断定Struts Action是否正确执行.<br />   verifyNoActionErrors() -- 判断Action里没有任何的Action;<br />   verifyForward("hotlineList") -- 判断Action确实转发到hotlineList;      <br />   assertNotNull(request.getAttribute("hotlineList")) -- 判断Action确实返回了hotlineList并且不为空<br /><br />到这里,我们已经基本上讨论完了StrutsTestCase的核心部分. 从头到尾,我们没有发布应用程序,也不需要Web服务器,对我们来讲,Struts Action就象普通的Java Class一样容易调试测试.这就是StrutsTestCase给我们带来的方便.<br /><br /><b><span style="FONT-SIZE: 16px">五、深入StrutsTestCase</span></b><br /><br />  除了以上我们用到的几个断定和校验方法外,StrutsTestCase还提供了其他几个方法便于我们测试Struts Action. 下面我一一讲述,具体的大家可以参考文档.<br /><br />verifyActionErrors/Messages --  校验ActionActionServlet controller 是否发送了ActionError或ActionMessage.   参数为ActionError/Message Key<br />verifyNoActionErrors/Messages --校验ActionActionServlet controller 没有发送ActionError或ActionMessage<br />VerifyForward -- 校验Action是否正确转发到指定的ActionForward.<br />VerifyForwardPath -- 校验Action是否正确转发到指定的URL<br />verifyInputForward -- 校验Action是否转发到Action Mapping里的input属性<br />verifyTilesForward/verifyInputTilesForward--和以上类似,应用程序使用到tiles时用的<br /><br /><b><span style="FONT-SIZE: 16px">六、关于Web.xml和Struts-Config.xml</span></b><br /><br />  缺省情况下,StrutsTestCase认为你的Web.xml和struts-config.xml的路径分别是:<br /><span style="COLOR: blue">  /WEB-INF/web.xml和/WEB-INF/struts-config.xml</span><br /><br />  1. 假如你的web.xml/struts-config.xml的路径是<br />  d:/app/web/WEB-INF/web.xml(struts-config.xml)的话,就需要把d:/app/web加到classpath.<br />  <br />  2. 假如你的struts config是strust-config-module.xml,<br />  那么必须调用setConfigFile()设置你的struts config文件<br />  <br /><br /><b><span style="FONT-SIZE: 16px">七、结束语</span></b><br />  J2EE应用程序的测试在开发过程中占有相当重要的位置,利用StrutsTestCase能极大方便你测试基于Struts的应用程序.<br /><img src ="http://www.blogjava.net/huhu/aggbug/43257.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huhu/" target="_blank">似水流年</a> 2006-04-26 13:47 <a href="http://www.blogjava.net/huhu/articles/43257.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts html:multibox标签(转载)</title><link>http://www.blogjava.net/huhu/articles/39413.html</link><dc:creator>似水流年</dc:creator><author>似水流年</author><pubDate>Wed, 05 Apr 2006 08:18:00 GMT</pubDate><guid>http://www.blogjava.net/huhu/articles/39413.html</guid><wfw:comment>http://www.blogjava.net/huhu/comments/39413.html</wfw:comment><comments>http://www.blogjava.net/huhu/articles/39413.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huhu/comments/commentRss/39413.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huhu/services/trackbacks/39413.html</trackback:ping><description><![CDATA[
		<p>
				<font size="2">问题原型：<br />     添加页面中有10个checkbox，用户选中了5个后提交<br />     修改页面中应显示10个checkbox，同时应该有5个已经被选中<br /> <br />详细实际问题：<br />    为了满足业务需要，从linux安装盘中的comps.xml中读取提供的服务所依赖的包<br />    显示在页面上，根据包的类型（default,mandatory,optional）决定显示的方法<br />    default默认选中，mandatory不提供选择，optional为用户可选<br />   </font>
		</p>
		<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
				<div>
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">c:choose</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">c:when </span>
						<span style="COLOR: #ff0000">test</span>
						<span style="COLOR: #0000ff">="${p.type == 'mandatory'}"</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">td</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">input </span>
						<span style="COLOR: #ff0000">type</span>
						<span style="COLOR: #0000ff">="checkbox"</span>
						<span style="COLOR: #ff0000"> name</span>
						<span style="COLOR: #0000ff">="nodeRPMS"</span>
						<span style="COLOR: #ff0000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    style</span>
						<span style="COLOR: #0000ff">="VISIBILITY: hidden; "</span>
						<span style="COLOR: #ff0000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    checked</span>
						<span style="COLOR: #0000ff">="true"</span>
						<span style="COLOR: #ff0000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    value</span>
						<span style="COLOR: #0000ff">="&lt;c:out value="</span>
						<span style="COLOR: #ff0000">${p.rpmName}"</span>
						<span style="COLOR: #0000ff">/&gt;</span>
						<span style="COLOR: #000000">"/&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">&lt;/</span>
						<span style="COLOR: #800000">td</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">&lt;/</span>
						<span style="COLOR: #800000">c:when</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   </span>
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">c:when </span>
						<span style="COLOR: #ff0000">test</span>
						<span style="COLOR: #0000ff">="${p.type == 'default'}"</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">td</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span>
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">input </span>
						<span style="COLOR: #ff0000">type</span>
						<span style="COLOR: #0000ff">="checkbox"</span>
						<span style="COLOR: #ff0000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />       name</span>
						<span style="COLOR: #0000ff">="nodeRPMS"</span>
						<span style="COLOR: #ff0000">  checked</span>
						<span style="COLOR: #0000ff">=true  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />       </span>
						<span style="COLOR: #ff0000">value</span>
						<span style="COLOR: #0000ff">="&lt;c:out  value="</span>
						<span style="COLOR: #ff0000">${p.rpmName}"</span>
						<span style="COLOR: #0000ff">/&gt;</span>
						<span style="COLOR: #000000">"/&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">&lt;/</span>
						<span style="COLOR: #800000">td</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   </span>
						<span style="COLOR: #0000ff">&lt;/</span>
						<span style="COLOR: #800000">c:when</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">c:when </span>
						<span style="COLOR: #ff0000">test</span>
						<span style="COLOR: #0000ff">="${p.type == 'optional'}"</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">td</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span>
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">input </span>
						<span style="COLOR: #ff0000">type</span>
						<span style="COLOR: #0000ff">="checkbox"</span>
						<span style="COLOR: #ff0000"> name</span>
						<span style="COLOR: #0000ff">="nodeRPMS"</span>
						<span style="COLOR: #ff0000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />       value</span>
						<span style="COLOR: #0000ff">="&lt;c:out value="</span>
						<span style="COLOR: #ff0000">${p.rpmName}"</span>
						<span style="COLOR: #0000ff">/&gt;</span>
						<span style="COLOR: #000000">"/&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">&lt;/</span>
						<span style="COLOR: #800000">td</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">&lt;/</span>
						<span style="COLOR: #800000">c:when</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						</span>
						<span style="COLOR: #0000ff">&lt;/</span>
						<span style="COLOR: #800000">c:choose</span>
						<span style="COLOR: #0000ff">&gt;</span>
				</div>
		</div>
		<p>在处理层，采用struts的form来接受，定义string [] nodeRPMs接受即可<br />接受后存在数据库里，然后读出来在显示在页面上<br /><br />在修改页面，首先应该有全部的checkbox，同时用户选中的应该已经被打勾（这来自数据库读出的记录）,经过中午的查找资料<br />才知道可以使用mutilbox解决这个问题<br /></p>
		<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
				<div>
						<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">${p.type == 'mandatory'}</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">td</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">input type</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">checkbox</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000"> name</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">nodeRPMS</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    style</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">VISIBILITY: hidden; </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: #0000ff">checked</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">true</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">
								<br />
								<img id="Codehighlighter1_177_187_Open_Image" onclick="this.style.display='none'; Codehighlighter1_177_187_Open_Text.style.display='none'; Codehighlighter1_177_187_Closed_Image.style.display='inline'; Codehighlighter1_177_187_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
								<img id="Codehighlighter1_177_187_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_177_187_Closed_Text.style.display='none'; Codehighlighter1_177_187_Open_Image.style.display='inline'; Codehighlighter1_177_187_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />    value</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">&lt;c:out value=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">$</span>
						<span id="Codehighlighter1_177_187_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_177_187_Open_Text">
								<span style="COLOR: #000000">{p.rpmName}</span>
						</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">/&gt;</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">td</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" />
								<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">td</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">html:multibox property</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">nodeRPMS</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:</span>
						<span style="COLOR: #0000ff">out</span>
						<span style="COLOR: #000000"> value</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">${p.rpmName}</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">html:multibox</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">td</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>
				</div>
		</div>
		<p>
				<br />mutilbox会根据你读出的值来设定<br /> struts中的checkbox是单选的，它的值应该只有true和false或者yes no或者on off之分；<br />r如果希望使用一组可以多选的checkbox，在struts中的页面标签应该是html:multibox,它的用法：&lt;html:multibox property="strArray" value="value1"&gt;或者<br />       &lt;html:multibox property="strArray"&gt;value2&lt;/html:multibox&gt;</p>
		<p>真正载页面上使用时可能是这样：<br />&lt;html:multibox property="strArray"&gt;a&lt;/html:multibox&gt;<br />&lt;html:multibox property="strArray"&gt;b&lt;/html:multibox&gt;<br />&lt;html:multibox property="strArray"&gt;c&lt;/html:multibox&gt;</p>
		<p>当然"strArray"一定是页面相对应的formbean中的一个属性，并且应该是数组：<br />private String[] strArray; //提供get set方法</p>
		<p>这样，如果我们在页面上面选中了前两个，则strArray.length=2;strArray[0]里面的值是a,strArray[1]里面的值是b;<br />如果我们把form中的strArray设置为strArray[0]="b",strArray[1]="c",则转到页面之后，页面上只有后两项被选中<br />所以这样就可以解决问题了<br /><br /></p>
<img src ="http://www.blogjava.net/huhu/aggbug/39413.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huhu/" target="_blank">似水流年</a> 2006-04-05 16:18 <a href="http://www.blogjava.net/huhu/articles/39413.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>