Chinaunix首页 | 论坛 | 博客
  • 博客访问: 30479338
  • 博文数量: 708
  • 博客积分: 12163
  • 博客等级: 上将
  • 技术积分: 8240
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-04 20:59
文章分类

全部博文(708)

分类: Java

2008-10-23 13:33:11

1.Struts2强大,但也有很多需要解决的问题。就拿我现在这Blog这个FCKEditor来说吧,解决Struts2或Webwork的方案一直没有终止过。我试图修改FCKEditor Java版本的源代码,想改成 extends ActionSuppot, 但发现就算实现了,也代价非常大(可能FCKEdtitor的配置不能按官方来了),最后弄来弄个,选了个折中的办法。

Struts2使用不了FCKEditor的原因是因为Struts2的Filter,如果修改一下Struts2在Web.xml里的注册。

xml 代码
  1.   
  2.     <filter>  
  3.         <filter-name>struts2filter-name>  
  4.         <filter-class>  
  5.             org.apache.struts2.dispatcher.FilterDispatcher   
  6.         filter-class>  
  7.     filter>  
  8.   
  9.     
  10.         <filter-mapping>  
  11.         <filter-name>struts2filter-name>  
  12.         <url-pattern>/*url-pattern>  
  13.         filter-mapping>  
  14.     -->  
  15.   
  16.     <filter-mapping>  
  17.         <filter-name>struts2filter-name>  
  18.         <url-pattern>*.actionurl-pattern>  
  19.     filter-mapping>  
  20.   
  21.     <filter-mapping>  
  22.         <filter-name>struts2filter-name>  
  23.         <url-pattern>*.manageurl-pattern>  
  24.     filter-mapping>  

 

注意这个时候action,manage的后缀要与struts.properties一致,不然会报错。

配置完后,所有用到过Struts2标签的页面都要通过Action转发过来,这样就不会报Struts2标签错误了。这对喜欢把JSP放在WEB-INF下的Web开发人员来说,不是什么问题。。

 

2.关于关闭Struts2自动验证的烦人英文问题。

应该有不少使用Struts2的人都是从Struts1过来的,但Struts2和Struts1是完全不同的,所以在配置Struts2的时间,难免有点畏缩,喜欢用它的默认配置。比如在自己建立的Struts.xml里,大家一般都这么写:

xml 代码
  1.         "">  
  2. <struts>  
  3.   
  4.     <include file="struts-default.xml" />  
  5.     <include file="struts_xml/welcome.xml" />  
  6.     <include file="struts_xml/employee.xml" />  
  7.     <include file="struts_xml/department.xml" />  
  8.     <include file="struts_xml/nunEnterprise.xml" />  
  9.     <include file="struts_xml/enterprise.xml" />  
  10.     <include file="struts_xml/foreignEnterprise.xml" />  
  11.     <include file="struts_xml/exhibition.xml" />  
  12.     <include file="struts_xml/training.xml" />  
  13.     <include file="struts_xml/serviceEnterprise.xml" />  
  14.     <include file="struts_xml/mailController.xml" />  
  15.     <include file="struts_xml/enterpriseSearchController.xml" />  
  16.     <include file="struts_xml/foreignEnterpriseSearchController.xml" />  
  17.     <include file="struts_xml/serviceEnterpriseSearchController.xml" />  
  18.     <include file="struts_xml/nunEnterpriseSearchController.xml" />  
  19.     <include file="struts_xml/jChartController.xml" />  
  20.   
  21.   
  22.     <package name="default" extends="struts-default">  
  23.         <global-results>  
  24.             <result name="Exception">/exception.jspresult>  
  25.             <result name="SQLException">/exception.jspresult>  
  26.         global-results>  
  27.   
  28.   
  29.         <global-exception-mappings>  
  30.             <exception-mapping exception="java.sql.SQLException"  
  31.                 result="SQLException" />  
  32.             <exception-mapping exception="java.lang.Exception"  
  33.                 result="Exception" />  
  34.         global-exception-mappings>  
  35.     package>  
  36.        
  37. struts>  

里面有一个叫“struts-default.xml”,  这是Struts2默认的重要配置文件。而且interceptor默认的配置为:

xml 代码
  1. <interceptor-stack name="defaultStack">  
  2.     <interceptor-ref name="exception"/>  
  3.     <interceptor-ref name="alias"/>  
  4.     <interceptor-ref name="servletConfig"/>  
  5.     <interceptor-ref name="prepare"/>  
  6.     <interceptor-ref name="i18n"/>  
  7.     <interceptor-ref name="chain"/>  
  8.     <interceptor-ref name="debugging"/>  
  9.     <interceptor-ref name="profiling"/>  
  10.     <interceptor-ref name="scopedModelDriven"/>  
  11.     <interceptor-ref name="modelDriven"/>  
  12.     <interceptor-ref name="fileUpload"/>  
  13.     <interceptor-ref name="checkbox"/>  
  14.     <interceptor-ref name="staticParams"/>  
  15.     <interceptor-ref name="params">  
  16.       <param name="excludeParams">dojo\..*param>  
  17.     interceptor-ref>  
  18.     <interceptor-ref name="conversionError"/>  
  19.     <interceptor-ref name="validation">  
  20.         <param name="excludeMethods">input,back,cancel,browseparam>  
  21.     interceptor-ref>  
  22.     <interceptor-ref name="workflow">  
  23.         <param name="excludeMethods">input,back,cancel,browseparam>  
  24.     interceptor-ref>  
  25. interceptor-stack>  

 

是不是什么interceptor都给你加载了。如果你这个时候使用了Validation.xml,那么一旦出现类型转换错误的失误,就会出现一些烦的英文,解决办法是:

xml 代码
  1.         "">  
  2. <struts>  
  3.   
  4.     <package name="employee" extends="default">  
  5.   
  6.         <interceptors>  
  7.             <interceptor-stack name="modefied">  
  8.                 <interceptor-ref name="exception" />  
  9.                 <interceptor-ref name="alias" />  
  10.                 <interceptor-ref name="servlet-config" />  
  11.                 <interceptor-ref name="prepare" />  
  12.                 <interceptor-ref name="i18n" />  
  13.                 <interceptor-ref name="chain" />  
  14.                 <interceptor-ref name="debugging" />  
  15.                 <interceptor-ref name="profiling" />  
  16.                 <interceptor-ref name="scoped-model-driven" />  
  17.                 <interceptor-ref name="model-driven" />  
  18.                 <interceptor-ref name="fileUpload" />  
  19.                 <interceptor-ref name="checkbox" />  
  20.                 <interceptor-ref name="static-params" />  
  21.                 <interceptor-ref name="params" />  
  22.   
  23.                 <interceptor-ref name="validation">  
  24.                     <param name="excludeMethods">  
  25.                         input,back,cancel,browse   
  26.                     param>  
  27.                 interceptor-ref>  
  28.                 <interceptor-ref name="workflow">  
  29.                     <param name="excludeMethods">  
  30.                         input,back,cancel,browse   
  31.                     param>  
  32.                 interceptor-ref>  
  33.             interceptor-stack>  
  34.         interceptors>  
  35.         <default-interceptor-ref name="modefied" />  
  36.   
  37.   
  38.   
  39.   
  40.           
  41.         <action name="employeeLogin"  
  42.             class="cn.gov.tdb.controller.EmployeeLoginController"  
  43.             method="login">  
  44.             <result name="success">welcome.jsp?active=1result>  
  45.             <result name="input">login.jspresult>  
  46.         action>  
  47.   
  48.         <action name="employeeLogout"  
  49.             class="cn.gov.tdb.controller.EmployeeLoginController"  
  50.             method="logout">  
  51.             <result name="success">index.jspresult>  
  52.             <result name="input">index.jspresult>  
  53.         action>  
  54.           
  55.   
  56.   
  57.           
  58.   
  59.         <action name="employeeCRUD"  
  60.             class="cn.gov.tdb.controller.EmployeeController"  
  61.             method="saveEmployee">  
  62.             <result name="success">welcome.jsp?active=1result>  
  63.             <result name="input">employeeForm.jspresult>  
  64.         action>  
  65.   
  66.         <action name="listEmployees"  
  67.             class="cn.gov.tdb.controller.EmployeeController"  
  68.             method="listEmployees">  
  69.             <result name="success">listEmployees.jspresult>  
  70.             <result name="input">listEmployees.jspresult>  
  71.         action>  
  72.           
  73.   
  74.     package>  
  75. struts>  

 自己重定义一个interceptor, 把

xml 代码
  1. <interceptor-ref name="conversionError"/>  

删除就可以了。这样,烦人的英文就解决了

 

 

3.Struts2需要注意的一个小地方

今天在运行Struts2时,无意间发现程序在写Struts.xml有这样的问题:

以下是本人一个Action映射的配置文件

xml 代码
  1. <action name="saveExhibitionAppTable"  
  2.             class="cn.gov.tdb.controller.EnterpriseController"  
  3.             method="saveExhibitionAppTable">  
  4.             <result name="input">exhibitionAppTable.jspresult>  
  5.             <result name="success" type="redirect-action">  
  6.                 generateBarcode.tdbdb?getTichetSource=${getTichetSource}&companyId=${companyId}&serviceId=${serviceId}   
  7.             result>  
  8.         action>  

 

没有什么特别的地方就是在

xml 代码
  1. <result name="success" type="redirect-action">  
  2.                 generateBarcode.tdbdb?getTichetSource=${getTichetSource}&companyId=${companyId}&serviceId=${serviceId}   
  3.             result>  
这里返回的是一个redirect-action, ${getTicketSource}等这三个参数是这个Action的三个属性(有get,set方法的),我想把它们传给generateBarcode.tdbdb, 却发现一直取不到这三个传过来的参数,空指针报错.
然后我又把配置文件改成如下,弄成generateBarcode.jsp发现值确实已经传过来了,看来Struts2在redirec-action的时候已经处理过了.
xml 代码
  1. <result name="success">
  2.                 generateBarcode.jsp?getTichetSource=${getTichetSource}&companyId=${companyId}&serviceId=${serviceId}   
  3.             result>  
查了查Strut2的文档,发现有以下配置,也就是说这个时候把要传递的参数如果分开来的话,通过redirec-action也是可以正常传过来的.
xml 代码
  1. <action name="saveExhibitionAppTable"  
  2.             class="cn.gov.tdb.controller.EnterpriseController"  
  3.             method="saveExhibitionAppTable">  
  4.             <result name="input">exhibitionAppTable.jspresult>  
  5.             <result name="success" type="redirect-action">  
  6.                 <param name="actionName">generateBarcodeparam>  
  7.                 <param name="namespace">/param>  
  8.                 <param name="getTichetSource">${getTichetSource}param>  
  9.                 <param name="companyId">${companyId}param>  
  10.                 <param name="serviceId">${serviceId}param>  
  11.             result>  
  12.         action>  

 

阅读(2507) | 评论(0) | 转发(0) |
0

上一篇:Guice与Spring整合

下一篇:Struts2.0的一个Bug

给主人留下些什么吧!~~