﻿<?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/zqli/category/13112.html</link><description>为学日益，为道日损。</description><language>zh-cn</language><lastBuildDate>Fri, 09 Mar 2007 10:46:29 GMT</lastBuildDate><pubDate>Fri, 09 Mar 2007 10:46:29 GMT</pubDate><ttl>60</ttl><item><title>[转]Struts 2.0 解读笔记 </title><link>http://www.blogjava.net/zqli/archive/2007/03/09/102873.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Fri, 09 Mar 2007 08:55:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2007/03/09/102873.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/102873.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2007/03/09/102873.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/102873.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/102873.html</trackback:ping><description><![CDATA[
		<p> struts2 的demo 中的employee层可以清晰的暂时struts希望给开发者带来的架构</p>
		<p>--------------------------</p>
		<p>EmployeeAction &lt;-- AbstractCRUDAction (web 层)<br />   ^<br />   |<br />EmployeeDao &lt;-- AbstractDao &lt;-- Dao (Domain 层，demo中也作为service存在于spring容器中)<br />   ^<br />   |<br />Employee &lt;--IDEntity</p>
		<p>--------------------------</p>
		<p>struts.xml 配置</p>
		<p>    &lt;package name="skill" extends="default" namespace="/skill"&gt;<br />        &lt;default-interceptor-ref name="crudStack"/&gt;</p>
		<p>        &lt;action name="list" class="org.apache.struts2.showcase.action.SkillAction" method="list"&gt;<br />            &lt;result&gt;/empmanager/listSkills.jsp&lt;/result&gt;<br />            &lt;interceptor-ref name="basicStack"/&gt;<br />        &lt;/action&gt;<br />        &lt;action name="edit" class="org.apache.struts2.showcase.action.SkillAction"&gt;<br />            &lt;result&gt;/empmanager/editSkill.jsp&lt;/result&gt;<br />            &lt;interceptor-ref name="params" /&gt;<br />            &lt;interceptor-ref name="basicStack"/&gt;<br />        &lt;/action&gt;<br />        &lt;action name="save" class="org.apache.struts2.showcase.action.SkillAction" method="save"&gt;<br />            &lt;result name="input"&gt;/empmanager/editSkill.jsp&lt;/result&gt;<br />            &lt;result type="redirect"&gt;edit.action?skillName=${currentSkill.name}&lt;/result&gt;<br />        &lt;/action&gt;<br />        &lt;action name="delete" class="org.apache.struts2.showcase.action.SkillAction" method="delete"&gt;<br />            &lt;result name="error"&gt;/empmanager/editSkill.jsp&lt;/result&gt;<br />            &lt;result type="redirect"&gt;edit.action?skillName=${currentSkill.name}&lt;/result&gt;  这里展现了struts2具有良好的url特性，比起ww的crud!edit让人舒服多了<br />        &lt;/action&gt;<br />    &lt;/package&gt;</p>
		<p>    &lt;package name="employee" extends="default" namespace="/employee"&gt;<br />        &lt;default-interceptor-ref name="crudStack"/&gt;</p>
		<p>        &lt;action name="list" class="org.apache.struts2.showcase.action.EmployeeAction" method="list"&gt;<br />            &lt;result&gt;/empmanager/listEmployees.jsp&lt;/result&gt;<br />            &lt;interceptor-ref name="basicStack"/&gt;<br />        &lt;/action&gt;<br />        &lt;action name="edit-*" class="org.apache.struts2.showcase.action.EmployeeAction"&gt;<br />         &lt;param name="empId"&gt;{1}&lt;/param&gt;<br />            &lt;result&gt;/empmanager/editEmployee.jsp&lt;/result&gt;<br />            &lt;interceptor-ref name="crudStack"&gt;&lt;param name="validation.excludeMethods"&gt;execute&lt;/param&gt;&lt;/interceptor-ref&gt;<br />        &lt;/action&gt;<br />        &lt;action name="save" class="org.apache.struts2.showcase.action.EmployeeAction" method="save"&gt;<br />            &lt;result name="input"&gt;/empmanager/editEmployee.jsp&lt;/result&gt;<br />            &lt;result type="redirect"&gt;edit-${currentEmployee.empId}.action&lt;/result&gt;<br />        &lt;/action&gt;<br />        &lt;action name="delete" class="org.apache.struts2.showcase.action.EmployeeAction" method="delete"&gt;<br />            &lt;result name="error"&gt;/empmanager/editEmployee.jsp&lt;/result&gt;<br />            &lt;result type="redirect"&gt;edit-${currentEmployee.empId}.action&lt;/result&gt;<br />        &lt;/action&gt;<br />    &lt;/package&gt;<br />    <br />-----------------------------<br />每一个action有自己的properties文件，非常便于管理和代码生成，<br />当然也有一个全局的globalMessages.properties来存放一些save,delete这些都一样的字符<br />employee=Employee<br />employee.firstName=First Name<br />employee.lastName=Last Name<br />employee.description=Description</p>
		<p>employee.id.required=Id is required<br />employee.lastName.required=Last Name is required<br />employee.birthDate.required=Birthdate is required<br />employee.backtolist=Back to Employee List</p>
		<p>每个action自己的validation<br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "<a href="http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd</a>"&gt;<br />&lt;validators&gt;<br />    &lt;!-- Field-Validator Syntax --&gt;<br />    &lt;field name="currentEmployee.empId"&gt;<br />        &lt;field-validator type="required"&gt;<br />            &lt;message key="employee.id.required"/&gt;<br />        &lt;/field-validator&gt;<br />    &lt;/field&gt;<br />    &lt;field name="currentEmployee.lastName"&gt;<br />        &lt;field-validator type="requiredstring"&gt;<br />            &lt;param name="trim"&gt;true&lt;/param&gt;<br />            &lt;message key="employee.lastName.required"/&gt;<br />        &lt;/field-validator&gt;<br />    &lt;/field&gt;<br />    &lt;field name="currentEmployee.birthDate"&gt;<br />        &lt;field-validator type="required"&gt;<br />            &lt;message key="employee.birthDate.required"/&gt;<br />        &lt;/field-validator&gt;<br />    &lt;/field&gt;<br />&lt;/validators&gt;</p>
		<p>--------------------------------<br />DAO是spring的bean,spring默认作为struts2的业务组件容器<br />在struts.properties中struts.objectFactory = spring</p>
		<p>由于这里是autowire，Autowiring means to look for objects defined in Spring with the same name as your object property<br />所以action中所有用到IoC的地方，都会自动注入（因为action本质也是bean，下面会讲到）</p>
		<p>&lt;beans default-autowire="byName"&gt; wire有四种方法：name， type， auto， constructor</p>
		<p>    &lt;bean id="skillDao" class="org.apache.struts2.showcase.dao.SkillDao"/&gt;<br />    &lt;bean id="employeeDao" class="org.apache.struts2.showcase.dao.EmployeeDao"/&gt;<br />    <br />----------------------------------<br />struts2中的每一个action,也就是struts.xml里面声明的action,最终都将作为spring中的一个bean完成请求。<br />如果你不做额外的设定，struts2会自动生成这个bean。<br />如果你有特殊的需要，还可以在applicationContext.xml自己声明这个bean<br />你必须根据需要来决定是否再次声明<br />struts.xml<br />&lt;!DOCTYPE struts PUBLIC<br />    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"<br />    "<a href="http://struts.apache.org/dtds/struts-2.0.dtd">http://struts.apache.org/dtds/struts-2.0.dtd</a>"&gt;<br />&lt;struts&gt;<br />    &lt;include file="struts-default.xml"/&gt;</p>
		<p>    &lt;package name="default" extends="struts-default"&gt;<br />        &lt;action name="foo" class="com.acme.Foo"&gt;  这个foo，在applicationConext.xml中没有声明，struts会自动生成一个bean<br />            &lt;result&gt;foo.ftl&lt;/result&gt;<br />        &lt;/action&gt;<br />    &lt;/package&gt;</p>
		<p>    &lt;package name="secure" namespace="/secure" extends="default"&gt;<br />        &lt;action name="bar" class="bar"&gt;           这个foo，在applicationConext.xml中声明了，struts会使用下面配置<br />            &lt;result&gt;bar.ftl&lt;/result&gt;<br />        &lt;/action&gt;<br />    &lt;/package&gt;<br />&lt;/struts&gt;</p>
		<p>applicationConext.xml<br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "<a href="http://www.springframework.org/dtd/spring-beans.dtd">http://www.springframework.org/dtd/spring-beans.dtd</a>"&gt;<br />&lt;beans default-autowire="autodetect"&gt;<br />    &lt;bean id="bar" class="com.my.BarClass" singleton="false"/&gt;<br />    ...<br />&lt;/beans&gt;</p>
		<p>-------------------------<br />无缝集成ajax<br />只要声明了theme="ajax"，该标签控件的操作就被转换成ajax，请求发送到AjaxRemoteForm<br />Configured Editor configuration:<br />&lt;s:form id="form2" action="AjaxRemoteForm" method="post"&gt;<br />    &lt;s:textarea id="editor2" name="data" theme="ajax" cols="50" rows="10" value="Test Data 2"&gt;<br />        &lt;s:param name="editorControls"&gt;textGroup;|;justifyGroup;|;listGroup;|;indentGroup&lt;/s:param&gt;<br />    &lt;/s:textarea&gt;<br />    &lt;s:submit value="Submit"/&gt;<br />&lt;/s:form&gt;</p>
		<p>
				<br />------------------------<br />集成了多种模板<br />jsp,velocity,freemaker</p>
		<p>
				<br />------------------------</p>
		<p>struts2 继承了ww2的优良传统，并且摈弃了ww2的一些缺陷，也可以看成是对ww2的一次重购。<br />无疑是目前最主流，最强大的MVC框架了。</p>
		<p>它实现了和spring的完美结合</p>
		<p>集成了ajax（dojo+dwr）</p>
		<p>其插件支持jasperreports，jfreechart</p>
<img src ="http://www.blogjava.net/zqli/aggbug/102873.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2007-03-09 16:55 <a href="http://www.blogjava.net/zqli/archive/2007/03/09/102873.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原]用JavaScript实现动态增删表格，Struts完成业务操作。</title><link>http://www.blogjava.net/zqli/archive/2006/12/18/88607.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Mon, 18 Dec 2006 10:55:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2006/12/18/88607.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/88607.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2006/12/18/88607.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/88607.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/88607.html</trackback:ping><description><![CDATA[
		<p>        今天，应项目需求，涉及到需要在一个页面里动态添加人员信息，表格的动态增删，借助JS控制，先在网上查了几个类似的示例，后来又改了改，就成了现在用的。<br />  <strong>JS部分代码如下：<br /></strong> &lt;script&gt;<br />         var rowIndex=0;<br />function addLine(obj){<br />var objSourceRow=obj.parentNode.parentNode;<br />var objTable=obj.parentNode.parentNode.parentNode.parentNode;<br />if(obj.value=='增加详细伤亡人员信息'){<br />rowIndex++;<br />var objRow=objTable.insertRow(rowIndex);<br />var objCell;<br />for(i=0;i&lt;18;i++){<br />objCell=objRow.insertCell(i);<br />objCell.innerHTML=objSourceRow.cells[i].innerHTML; </p>
		<p>}</p>
		<p>objCell=objRow.insertCell(18);<br />objCell.innerHTML=objSourceRow.cells[18].innerHTML.replace(/增加详细伤亡人员信息/,'删除');<br />}<br />else{<br />objTable.lastChild.removeChild(objSourceRow);<br />rowIndex--;<br />} <br />}</p>
		<p>function removeLine(){</p>
		<p>}<br />&lt;/script&gt;<br /><br /><strong>jsp页面部分代码：<br /></strong><br />    &lt;table width="100%" border="1" class="tableBorder" align=center &gt;<br />      &lt;tr align="center"&gt;<br />        &lt;td height="56" class=forumrow style="display:none"&gt;姓名&lt;/td&gt;<br />        &lt;td colspan="3" class=forumrow style="display:none" &gt;<br />          &lt;input  type="text" name="casualtyName" size="8"/&gt;<br />        &lt;/td&gt;<br />        &lt;td  class=forumrow style="display:none"&gt;性别&lt;/td&gt;<br />        &lt;td class=forumrow style="display:none" &gt;<br />          &lt;select name="sex"&gt;<br />     &lt;option value="male" selected&gt;男&lt;/option&gt;<br />     &lt;option value="female" &gt;女&lt;/option&gt;<br />          &lt;/select&gt;<br />        &lt;/td&gt;<br />        &lt;td  class=forumrow style="display:none"&gt;用工形式&lt;/td&gt;<br />        &lt;td  class=forumrow style="display:none"&gt;<br />          &lt;select name="useForm"&gt;<br />            &lt;option value="FORMAL_WORKER" selected&gt;正式工&lt;/option&gt;<br />            &lt;option value="CONTRACT_WORKER"&gt;合同工&lt;/option&gt;<br />            &lt;option value="TEMP_WORKER"&gt;临时工&lt;/option&gt;<br />          &lt;/select&gt;<br />        &lt;/td&gt;<br />        &lt;td class=forumrow style="display:none"&gt;工种&lt;/td&gt;<br />        &lt;td  class=forumrow style="display:none"&gt;<br />          &lt;select name="useKind"&gt;<br />            &lt;option value="MANAGER" selected&gt;管理人员&lt;/option&gt;<br />            &lt;option value="MU_GONG"&gt;木工&lt;/option&gt;<br />            &lt;option value="WA_GONG"&gt;瓦工&lt;/option&gt;<br />            &lt;option value="JIA_ZI_GONG"&gt;架子工&lt;/option&gt;<br />            &lt;option value="GANG_JIN_GONG"&gt;钢筋工&lt;/option&gt;<br />            &lt;option value="HUN_NING_TU_GONG"&gt;混凝土工&lt;/option&gt;<br />            &lt;option value="MO_HUI_GONG"&gt;抹灰工&lt;/option&gt;<br />            &lt;option value="JI_XIE_GONG"&gt;机械工&lt;/option&gt;<br />            &lt;option value="DIAN_GONG"&gt;电工&lt;/option&gt;<br />            &lt;option value="DIAN_HAN_GONG"&gt;电焊工&lt;/option&gt;<br />            &lt;option value="GUAN_GONG"&gt;管工&lt;/option&gt;<br />            &lt;option value="QIAN_GONG"&gt;钳工&lt;/option&gt;<br />            &lt;option value="YOU_QI_GONG"&gt;油漆工&lt;/option&gt;<br />            &lt;option value="FAN_SHUI_GONG"&gt;防水工&lt;/option&gt;<br />            &lt;option value="TONG_FENG_GONG"&gt;通风工&lt;/option&gt;<br />            &lt;option value="DIAO_ZHUANG_GONG"&gt;吊装工&lt;/option&gt;<br />            &lt;option value="BAN_YUN_GONG"&gt;搬运工&lt;/option&gt;<br />            &lt;option value="LI_GONG"&gt;力工&lt;/option&gt;<br />            &lt;option value="QIN_ZHA_GONG"&gt;勤杂工&lt;/option&gt;<br />          &lt;/select&gt;<br />        &lt;/td&gt;<br />        &lt;td class=forumrow style="display:none"&gt;年龄&lt;/td&gt;<br />        &lt;td class=forumrow style="display:none"&gt;<br />          &lt;input type="text" name="age" size="4"/&gt;<br />        &lt;/td&gt;<br />        &lt;td  class=forumrow style="display:none"&gt;从业时间&lt;/td&gt;<br />        &lt;td colspan="3" class=forumrow style="display:none"&gt;<br />          &lt;input type="text" name="workTime"  size="4"/&gt;<br />        &lt;/td&gt;<br />        &lt;td  class=forumrow style="display:none"&gt;文化程度&lt;/td&gt;<br />        &lt;td  class=forumrow style="display:none"&gt;<br />          &lt;select name="education"&gt;<br />            &lt;option value="ELEMENTORY_SCHOOL" selected&gt;小学及以下&lt;/option&gt;<br />            &lt;option value="JUNIOR_HIGH_SCHOOL"&gt;初中&lt;/option&gt;<br />            &lt;option value="SENIOR_HIGH_SCHOOL"&gt;高中/中专&lt;/option&gt;<br />            &lt;option value="COLLEGE"&gt;大专&lt;/option&gt;<br />            &lt;option value="GRADUATE"&gt;大专以上&lt;/option&gt;<br />          &lt;/select&gt;<br />        &lt;/td&gt;<br />        &lt;td class=forumrow style="display:none"&gt;承包形式&lt;/td&gt;<br />        &lt;td colspan="3" class=forumrow style="display:none"&gt;<br />          &lt;select name="contractTypeDetail"&gt;<br />            &lt;option value="ZONG_CHENG_BAO"&gt;总承包&lt;/option&gt;<br />            &lt;option value="ZHUAN_YE_FEN_BAO"&gt;专业分包&lt;/option&gt;<br />            &lt;option value="LAO_WU_FEN_BAO"&gt;劳务分包&lt;/option&gt;<br />          &lt;/select&gt;<br />        &lt;/td&gt;<br />        &lt;td  class=forumrow style="display:none"&gt;伤亡情况&lt;/td&gt;<br />        &lt;td  class=forumrow style="display:none"&gt;<br />          &lt;select name="casualtyInfo"&gt;<br />            &lt;option value="LIGHT_HURT" selected&gt;轻伤&lt;/option&gt;<br />            &lt;option value="HEAVEY_HURT"&gt;重伤&lt;/option&gt;<br />            &lt;option value="DIE"&gt;死亡&lt;/option&gt;<br />          &lt;/select&gt;<br />        &lt;/td&gt;<br />    &lt;td&gt;&lt;input name="add" type="button" id="add" value="增加详细伤亡人员信息" onClick="addLine(this)"&gt;&lt;/td&gt;<br />&lt;/tr&gt;<br />&lt;/table&gt;<br /><strong>ActionForm部分代码：<br /></strong><br />//伤亡人员<br />    private String age[];<br />    private String casualtyInfo[];<br />    private String contractTypeDetail[];<br />    private String education[];<br />    private Integer id;<br />    private String casualtyName[];<br />    private String sex[];<br />    private String useForm[];<br />    private String useKind[];<br />    private String workTime[];</p>
		<p>
				<br />    public String[] getAge() {<br />        return age;<br />    }</p>
		<p>    public void setAge(String age[]) {<br />        this.age = age;<br />    }</p>
		<p>    public void setWorkTime(String workTime[]) {<br />        this.workTime = workTime;<br />    }</p>
		<p>    public void setUseKind(String useKind[]) {<br />        this.useKind = useKind;<br />    }</p>
		<p>    public void setUseForm(String useForm[]) {<br />        this.useForm = useForm;<br />    }</p>
		<p>    public void setSex(String sex[]) {<br />        this.sex = sex;<br />    }</p>
		<p>    public void setcasualtyName(String casualtyName[]) {<br />        this.casualtyName = casualtyName;<br />    }</p>
		<p>    public void setId(Integer id) {<br />        this.id = id;<br />    }</p>
		<p>    public void setEducation(String education[]) {<br />        this.education = education;<br />    }</p>
		<p>    public void setcontractTypeDetail(String contractTypeDetail[]) {<br />        this.contractTypeDetail = contractTypeDetail;<br />    }</p>
		<p>    public void setCasualtyInfo(String casualtyInfo[]) {<br />        this.casualtyInfo = casualtyInfo;<br />    }</p>
		<p>    public String[] getCasualtyInfo() {<br />        return casualtyInfo;<br />    }</p>
		<p>    public String[] getcontractTypeDetail() {<br />        return contractTypeDetail;<br />    }</p>
		<p>    public String[] getEducation() {<br />        return education;<br />    }</p>
		<p>    public Integer getId() {<br />        return id;<br />    }</p>
		<p>    public String[] getcasualtyName() {<br />        return casualtyName;<br />    }</p>
		<p>    public String[] getSex() {<br />        return sex;<br />    }</p>
		<p>    public String[] getUseForm() {<br />        return useForm;<br />    }</p>
		<p>    public String[] getUseKind() {<br />        return useKind;<br />    }</p>
		<p>    public String[] getWorkTime() {<br />        return workTime;<br />    }<br /><strong>Action部分代码：</strong><br /><br />/**<br />         * 录入伤亡人员详细信息<br />         */</p>
		<p>        int counter = form.getcasualtyName().length;<br />        AccCasualtyPersonDAO perDAO = new AccCasualtyPersonDAO();<br />       AccCasualtyPersonInfo per = new AccCasualtyPersonInfo();<br />        for (int j = 1; j&lt;counter; j++) {<br />            per.setAccNo(accNo);<br />            per.setAge(Integer.valueOf(form.getAge()[j]));<br />            System.out.println("age:"+form.getAge()[j]);<br />            per.setCasualtyInfo(form.getCasualtyInfo()[j]);<br />             System.out.println("CasualtyInfo:"+form.getCasualtyInfo()[j]);<br />            per.setContractType(form.getcontractTypeDetail()[j]);<br />            per.setEducation(form.getEducation()[j]);<br />            per.setName(form.getcasualtyName()[j]);<br />            per.setSex(form.getSex()[j]);<br />            per.setUseForm(form.getUseForm()[j]);<br />            per.setUseKind(form.getUseKind()[j]);<br />            per.setWorkTime(form.getWorkTime()[j]);<br />           if (!perDAO.addAccCasualtyPerson(per)) {<br />                return mapping.findForward("inputKuaibaofail");<br />            }<br />    每行里面的项，都是必须填的，符合项目的需求。此外，也可不用Struts封装同名参数的功能，可以用JavaScript来做传值。</p>
<img src ="http://www.blogjava.net/zqli/aggbug/88607.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2006-12-18 18:55 <a href="http://www.blogjava.net/zqli/archive/2006/12/18/88607.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javax.servlet.ServletException: Cannot retrieve mapping for action /showProLists</title><link>http://www.blogjava.net/zqli/archive/2006/07/16/58442.html</link><dc:creator>放水老倌</dc:creator><author>放水老倌</author><pubDate>Sun, 16 Jul 2006 10:39:00 GMT</pubDate><guid>http://www.blogjava.net/zqli/archive/2006/07/16/58442.html</guid><wfw:comment>http://www.blogjava.net/zqli/comments/58442.html</wfw:comment><comments>http://www.blogjava.net/zqli/archive/2006/07/16/58442.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zqli/comments/commentRss/58442.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zqli/services/trackbacks/58442.html</trackback:ping><description><![CDATA[今天在用到Struts开发一个应用的时候遇到错误：<br /><p><b><font style="BACKGROUND-COLOR: #525d76" color="#ffffff">exception</font></b></p><pre>javax.servlet.ServletException: Cannot retrieve mapping for action /showProLists
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:846)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
	org.apache.jsp.apply.showProList_jsp._jspService(showProList_jsp.java:193)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
	org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
	org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
起初，怀疑是:struts-config.xml里的action配置错误，后来仔细检查，发现无错误，排除此疑！<br />用到的action：<br />public class ShowProListAction extends Action {<br />    public ActionForward execute(ActionMapping mapping,<br />                                 ActionForm actionForm,<br />                                HttpServletRequest request,<br />                                 HttpServletResponse Response) {<br />      // ShowProListForm form = (ShowProListForm)actionForm;<br />       <br />       String temp=request.getParameter("testSecID");<br />       int ID=Integer.parseInt(temp);<br />       System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"+ID);<br />       ShowProListDAO prolistDAO=new ShowProListDAO();</pre><pre>       ArrayList arr=new ArrayList();<br />       arr=prolistDAO.getProList(ID);<br />       if(arr==null){<br />           return mapping.findForward("null");<br />       }<br />       if(arr !=null){<br />           if(arr.size()==0){<br />               return mapping.findForward("null");<br />           }<br />           else{<br />               request.setAttribute("showProList",arr);<br />               request.setAttribute("stationID",temp);</pre><pre>               ArrayList proList=(ArrayList)request.getAttribute("showProList");<br />               for(int i=0;i&lt;proList.size();i++){<br />               ShowProList projects=(ShowProList)proList.get(i);<br />               <font color="#ff0000">System.out.println(projects.getProjectName());</font><br />               }<br />               <font color="#ff0000">System.out.println(temp);</font></pre><pre><br />               return mapping.findForward("success");<br />           }<br />       }<br />return mapping.findForward("fail");<br />    }<br />}<br /><font color="#ff0000">System.out.println(temp)和System.out.println(projects.getProjectName());<br /></font><font color="#000000">均正常输出。怀疑，</font><font color="#ff0000">return mapping.findForward("success")</font><font color="#000000">怀疑这一步跳转错误？<br />修改过若干遍struts-config.xml文件，依旧未果！！！！！<br /><br /><br /><br /><br />最后，dxian来帮忙检查，发现实际上，该action类，完全通过了。是在跳转到下个jsp页面后，jsp页面里有一表单form：<br />部分代码如下：<br />&lt;html:form action="showProLists" method="post"&gt;showProListAction.do<br />&lt;br&gt;&lt;br&gt;<br />&lt;%<br />ArrayList proList=(ArrayList)request.getAttribute("showProList");<br />%&gt;<br />因为，刚开始写该jsp页面时，是copy了一个过来直接改的，忘记把里的form去掉！结果，发生了错误！<br />至此，该问题解决！先前都没遇到过这个情况，花了好多时间在这个上面。<br />末了，要感谢下帮过我无数次的 dxian：）</font></pre><img src ="http://www.blogjava.net/zqli/aggbug/58442.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zqli/" target="_blank">放水老倌</a> 2006-07-16 18:39 <a href="http://www.blogjava.net/zqli/archive/2006/07/16/58442.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>