Board logo

标题: 使用 Spring 更好地处理 Struts 动作(3)技巧 [打印本页]

作者: look_w    时间: 2018-7-16 11:38     标题: 使用 Spring 更好地处理 Struts 动作(3)技巧

窍门 3. 将动作管理委托给 Spring一个更好的解决方法是将 Strut 动作管理委托给 Spring。您可以通过在 struts-config动作映射中注册一个代理来实现。代理负责在 Spring 环境中查找 Struts 动作。由于动作在 Spring 的控制之下,所以它可以填充动作的 JavaBean 属性,并为应用诸如 Spring 的 AOP 拦截器之类的特性带来了可能。
清单 5 中的 Action类与清单 4 中的相同。但是 struts-config 有一些不同:
清单 5. Spring 整合的委托方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
         "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
         "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<form-beans>
   <form-bean name="searchForm"
     type="org.apache.struts.validator.DynaValidatorForm">
              <form-property name="isbn"    type="java.lang.String"/>
   </form-bean>
  
</form-beans>
<global-forwards type="org.apache.struts.action.ActionForward">
    <forward   name="welcome"                path="/welcome.do"/>
    <forward   name="searchEntry"            path="/searchEntry.do"/>
    <forward   name="searchSubmit"           path="/searchSubmit.do"/>
</global-forwards>
<action-mappings>
   <action    path="/welcome" forward="/WEB-INF/pages/welcome.htm"/>
   <action    path="/searchEntry" forward="/WEB-INF/pages/search.jsp"/>
   <action    path="/searchSubmit"
            type="org.springframework.web.struts.DelegatingActionProxy" |(1)
            input="/searchEntry.do"
            validate="true"
            name="searchForm">
            <forward name="success" path="/WEB-INF/pages/detail.jsp"/>
            <forward name="failure" path="/WEB-INF/pages/search.jsp"/>
   </action>  
</action-mappings>
<message-resources parameter="ApplicationResources"/>
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
   <set-property
   property="pathnames"
   value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
<plug-in
   className="org.springframework.web.struts.ContextLoaderPlugIn">
   <set-property property="contextConfigLocation" value="/WEB-INF/beans.xml"/>
</plug-in>

</struts-config>




清单 5 是一个典型的 struts-config.xml 文件,只有一个小小的差别。它注册 Spring 代理类的名称,而不是声明动作的类名,如(1)处所示。DelegatingActionProxy 类使用动作映射名称查找 Spring 环境中的动作。这就是我们使用 ContextLoaderPlugIn声明的环境。
将一个 Struts 动作注册为一个 Spring bean 是非常直观的,如清单 6 所示。我利用动作映射使用 <bean>标记的名称属性(在这个例子中是 "/searchSubmit")简单地创建了一个 bean。这个动作的 JavaBean 属性像任何 Spring bean 一样被填充:
清单 6. 在 Spring 环境中注册一个 Struts 动作
1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="bookService" class="ca.nexcel.books.business.BookServiceImpl"/>
<bean name="/searchSubmit"  
       class="ca.nexcel.books.actions.SearchSubmit">
    <property name="bookService">
       <ref bean="bookService"/>
    </property>
</bean>
</beans>






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0