论坛首页 入门技术论坛

Struts多模块&DispatchAction

浏览 6961 次
该帖已经被评为新手帖
作者 正文
   发表时间:2007-09-23  

 

  1. 一、      配置web.xml 文档    
  2. 添加模块moduleOne、moduleTwo    
  3. <!-- mainModule -->    
  4.     <init-param>    
  5.       <param-name>config</param-name>    
  6.       <param-value>/WEB-INF/struts-config.xml</param-value>    
  7.     </init-param>    
  8.         
  9. <!-- moduleOne -->    
  10.     <init-param>    
  11.       <param-name>config/moduleOne</param-name>    
  12.       <param-value>/WEB-INF/moduleOne/struts-moduleOne.xml</param-value>    
  13.    </init-param>    
  14.         
  15. <!-- moduleTwo -->    
  16.    <init-param>    
  17.     <param-name>config/moduleTwo</param-name>        
  18.     <param-value>/WEB-INF/moduleTwo/struts-moduleTwo.xml</param-value>    
  19.    </init-param>    
  20. 注:<param-name>格式必须这样写,<param-value>是指在WEB-INF目录下新建moduleOne目录再创建struts-moduleOne.xml,struts-moduleOne.xml格式与struts-config.xml相同。在此同时在WebRoot目录下新建moduleOne和moduleTwo的文件夹,用于区分模块和存放页面文件    
  21.   
  22. 二、      配置struts-config.xml    
  23. <struts-config>    
  24.         <data-sources />    
  25.         <form-beans type="org.apache.struts.webapp.CustomFormBean" />    
  26.         <global-exceptions />    
  27.         <global-forwards    
  28.             type="org.apache.struts.webapp.CustomActionForward" />    
  29.         <action-mappings    
  30.            type="org.apache.struts.webapp.CustomActionMapping">    
  31.            <action path="/main" forward="/index.jsp" />    
  32.         </action-mappings>    
  33.         <message-resources parameter="com.accp.struts.ApplicationResources" />    
  34. </struts-config>注意: type 这三个类是从何而来的呢??答:自定义的    
  35. 所以在配置 struts-config.xml之前我们应创建它们,当然每个类都必须extenx 相应的父类,如下:    
  36. CustomFormBean extenx FormBeanConfig    
  37. CustomActionForward extenx ActionForward    
  38. CustomActionMapping extenx ActionMapping    
  39. 这些类里面可以什么都不写,当然比较好点规范就是在里内添加一个属性,如下:    
  40. private String example =””;    
  41. 相应的get()set()    
  42.   
  43. 三、      配置子模块    
  44. 经过上面的配置基本已完成,那么我们现在来配置moduleOne子模块信息,添加action、actionFrom、jsp。    
  45. 注意:action 必须extends DispatchAction, jsp页面应放在WebRoot目录下moduleOne    
  46. struts-moduleOne.xml如下:    
  47. <struts-config>    
  48.         <data-sources />    
  49.         <form-beans>    
  50.            <form-bean name="moduleOneForm"    
  51.                type="com.accp.struts.form.ModuleOneForm">    
  52.            </form-bean>    
  53.         </form-beans>    
  54.         <global-exceptions />    
  55.         <global-forwards>    
  56.             <!-- 转发到moduleTwo module指定哪个模块,全局转发 -->    
  57.         <forward module="/moduleTwo" redirect="true" name="succeed" path="/displayUser.jsp"/>    
  58.         </global-forwards>    
  59.         <action-mappings>    
  60.         <!-- 主模块index.jsp link导航 -->    
  61.          <action path="/reg" forward="/userRegist.jsp"/>    
  62.          <action path="/regist" name="moduleOneForm" scope="session" parameter="user"    
  63.              type="com.accp.struts.action.ModuleOneAction">    
  64.           </action>    
  65.         </action-mappings>    
  66.         <message-resources parameter="com.accp.struts.ApplicationResources" />    
  67. </struts-config>    
  68.   
  69. index.jsp 如下:    
  70. <html:link module="/moduleOne" action="/reg.do">到moduleOne的用户注册</html:link>    
  71. 注意:module属性,是指定某个模块,对应的就在某个模块配置<action/>    
  72.   
  73. userRegist.jsp 如下:    
  74. <html:form action="/regist?user=addUser">    
  75.        name : <html:text property="name"/><br/>    
  76.        sex : <html:text property="sex"/><br/>    
  77.        age : <html:text property="age"/><br/><br/>    
  78.        <html:submit value="Submit"/><html:reset value="Reset"/>    
  79. </html:form>    
  80. 注意:user是moduleOne.xml <action parameter="user"……/>因为我们用到了DispatchAction,addUser是指action里的某个方法.    
  81.   
  82. ModuleOneAction.java如下:    
  83. public class ModuleOneAction extends DispatchAction {    
  84. public ActionForward addUser(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {    
  85.                ModuleOneForm moduleOneForm = (ModuleOneForm) form;    
  86.               System.out.println("name :"+ moduleOneForm.getName());    
  87.                System.out.println("age :" + moduleOneForm.getAge());    
  88.                System.out.println("sex :" + moduleOneForm.getSex());    
  89.                return mapping.findForward("succeed");}}    
  90.   
  91. displayUser.jsp    
  92. <body>    
  93.        name:${moduleOneForm.name}<br/>    
  94.        age:${moduleOneForm.age}<br/>    
  95.        sex:${moduleOneForm.sex}<br/>    
  96.        <html:link action="/main.do">回到主模块</html:link>    
  97. </body>    
  98. 注意:displayUser.jsp 位于moduleTwo目录,<html:link> 没指定module 所以默认从主模块的struts-config.xml寻找配对的<action>    
  99.   
  100. 四、发布测试…….实现主模块跳转到moduleOne子模块然后导航到另一moduleTwo子模块再导航到主模块    
  101. 阅读时请留意注意部分  

阅读时请留意注意部分

在网上看了很多这方面的资料.. 但是. 发现都是很肤浅的一个介绍.

所以在下刚刚做完的一个项目就是用一个多模块的所有跟大家一起分享一下..

大家配置好首先看看他的跳转关系.. 就会很明白他们是怎么一样工作的了

附件清晰版本

   发表时间:2007-09-23  
按照楼主的方法,做了个DEMO,出了如下问题,还请指点.多谢!

web.xml部分配置如下:

<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>config/fund</param-name>
<param-value>/WEB-INF/struts-config/struts-config-fund.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>

struts-config-fund.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>
<data-sources />
<form-beans >
<form-bean name="fundForm" type="com.fundSystem.fund.form.FundForm" />

</form-beans>

<global-exceptions />
<global-forwards >
<forward name="success" path="/success.jsp" />
<forward name="error" path="/error.jsp" />

</global-forwards>

<action-mappings >
<action
path="/insertFund"
attribute="fundForm"
name="fundForm"
input="/fund_add.jsp"
scope="request"
type="org.springframework.web.struts.DelegatingActionProxy" >
<forward name="success" path="/success.jsp" contextRelative="true"/>
</action>

</action-mappings>
<message-resources parameter="message_zh_cn" null="false"/>
</struts-config>

jsp页面如下:

<html:form action="/insertFund method="post">
<table width="564" height="82" border="1" align="center" cellpadding="0" cellspacing="0" bgcolor="#F2F2F2" bordercolor="#E6E6E6">
<tr>
<td width="203" height="28">产品编号:</td>
<td width="204"><html:text property="fund_no"></html:text>
*</td>
</tr>
<tr>
<td width="203" height="28">产品名称:</td>
<td width="204"><html:text property="fund_name"></html:text>
*</td>
</tr>
<tr>
<td height="26">产品价格(RMB):</td>
<td><html:text property="price"></html:text>
*</td>
</tr>
<tr>
<td height="26"> 产品描述:</td>
<td><html:textarea property="description"></html:textarea>
*</td>
</tr>
</table>
<p align="center">
<input type="submit" name="Submit" value="添加">
 
<input type="reset" name="reset" value="重置">
</p>
</html:form>



message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Cannot retrieve mapping for action /insertFund
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
org.apache.jsp.fund.fund_005fadd_jsp._jspService(fund_005fadd_jsp.java:87)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
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:802)
0 请登录后投票
   发表时间:2007-09-23  
只有在config下配置的action才能使用
<html:form>标签

多模块配置
config/** 这些配置文件下的action 使用 <html:form>标签
就会出现 Cannot retrieve mapping for action 的异常..

跟踪了一下源代码,得出了这个结论..

不知道有没有人,能给出一个另外的解释?
0 请登录后投票
   发表时间:2007-09-24  
问题还是没有解决,期待中...
0 请登录后投票
   发表时间:2007-09-24  
此贴总被认为是入门贴,可网上搜不到一个解决方法,为什么? 是否有人可以指点一二...
0 请登录后投票
   发表时间:2007-09-26  
zdllionheart 写道
只有在config下配置的action才能使用
<html:form>标签

多模块配置
config/** 这些配置文件下的action 使用 <html:form>标签
就会出现 Cannot retrieve mapping for action 的异常..

跟踪了一下源代码,得出了这个结论..

不知道有没有人,能给出一个另外的解释?


其实这个很简单..
因为你在你的mian-config里面根本都没有配置这个action当然会说找不到这个action

那么你要想清楚你的思路.. 首先你要这么想..是要先进到主模块.在去子模块. 因为在你的子模块才有你
配置的东西.. 主模块的东西是写死的...

这位朋友整理下你的思路
0 请登录后投票
   发表时间:2007-09-26  
feigo 写道
此贴总被认为是入门贴,可网上搜不到一个解决方法,为什么? 是否有人可以指点一二...


请认真看看我整理出来的..
这个已经不是一个入门了..
但是为什么我的帖子老是会被扣分呢.我就比较郁闷
0 请登录后投票
   发表时间:2007-09-26  
楼主呀,我还是没有弄明白.  
主模块的页面都能正常工作,而子模块的页面都打不开.
页面是这样的:
  <div class="menutitle" onMouseOver="SwitchMenu('sub1')" onMouseOut="SwitchMenu('sub1')"><img src="img/1.gif" width="180"><span class="submenu" id="sub1"> - <a href="fund/fund_add.jsp" target="bottomFrame">添加基金产品</a><br>
    - <a href="fund/fund_find.jsp" target="bottomFrame">查询产品信息</a><br>
  </span> </div>
0 请登录后投票
   发表时间:2007-09-27  
<a href="fund/fund_add.jsp" target="bottomFrame">添加基金产品</a>这句改成..
<html:link module="youmodule" page="/fund_add.do">增加基金</html:link><br><br>



你的子module配置如下

<struts-config>
    <action-mappings>
<action path="/fund_add" forward="/fund/fund_add.jsp"/>

    </acion-mappings>
</struts-config>



这样写应该没有问题了.
0 请登录后投票
   发表时间:2007-09-28  
越改越乱了,还是不行.
    
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics