思路: action----------------->配置xml----------------------->前台view(------------------->validation后面写)
纯属一家之谈:使用的是struts2.1.6
公司一直用的是struts1,1用的是相当顺手,但是一里面也有一些问题,比如用struts自己的form,里面有date类型,还要让人转换麻烦的很!但是问题还是能解决的,呵呵:这几天闲来无事,就看看struts2,它不就是集成webwork的核心吗,还有些像jsf,也像struts1里面的那个depchAction(一个action里面多个方法,我的这个名字肯定错了)!struts2可以在一个action里面完成这个包里面的所有功能(也就是传说中经常用的增删改查),并且可以在这里把对象放进来,也可以放属性,我还是喜欢对象!然后从页面指定指定这个对象的属性就可以了!
这样action就操作完了!但你记住struts版本不同对应不同的xwork,不然会异常的!2.0跟2.1就不是亲戚!~
下来配置了,这个会出现很多莫名奇妙的问题,第一就是struts2到底支持通配符 * 不,这是考虑到以后项目中可能有很多struts-user.xml,struts-manager.xml,那么我在web.xml里面配置成如下这样,可以不?
<filter>
<filter-name>Struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<param-name>config</param-name>
<param-value>
struts-default.xml,
struts-plugin.xml,
struts.xml,
struts-*.xml
</param-value>
</init-param>
</filter>
我就觉得这样很烦,一是这样好像不通配,二是这样的话在WEB-INF下会有很多的xml文件,因为你能把struts放在这,你集成spring和hibernate的时候,xml肯定也放在这了,这样我感觉不好管理,所以我把他们放在专门的一个config文件里面建四个包:springXML,strutsXML,validation(这个是验证的,有人喜欢跟class文件放在一起)和一个属性文件!以后我就管理这几个文件里面的xml就可以了!这是一个问题。
在一个问题就是很多人开始写helloworld的时候,是看网上写的的,运行什么都没有问题,一旦加了自己的包就会找不到action的事件发生,很是郁闷,我在这点点行了,认真看看底下红色字体
<package name="master" extends="struts-default" namespace="/master">
<action name="master" class="masterAction" method="save" > 蓝色字体是我的spring bean 不要去管!
<result name="success">/HelloWorld.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
里面的name,extends,namespece都代表什么意思,底下为页面部分,为什么要这么写!
<s:form action="master" method="post" namespace="/master">
<s:textfield name="master.name" label="姓名"/> 蓝色字体是我action里面注入的对象属性名!
<s:submit/>
</s:form>
下来是truts.xml 里面的东西 eg:
这三个是什么意思,明白不,为什么第一行的value是false,你改成true看看有异常没有,呵呵!
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />
<constant name="struts.i18n.encoding" value="GBK" />
在这个文件里面,可以include 文件,你知道这里能用通配符不?继续瞎侃:
<struts>
<!-- 开启使用开发模式,详细错误提示 -->
<!-- <constant name="struts.devMode" value="true"/>--> struts2的一个bug在这,有的说是tomcat6.0以上有空格!
<!-- 指定每次请求到达,重新加载资源文件 -->
<!-- <constant name="struts.i18n.reload" value="true"/>-->
<!-- 指定每次配置文件更改后,自动重新加载 -->
<!-- <constant name="struts.configuration.xml.reload" value="true"/>-->
<!-- 指定XSLT Result使用样式表缓存 -->
<!-- <constant name="struts.xslt.nocache" value="true"/>-->
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />
<constant name="struts.i18n.encoding" value="GBK" />
<include file="strutsXML/struts-*.xml"></include> 原来可以这样写
</struts>
页面什么都不想说了,由于struts2支持什么freemarker,jsp,velocity什么的,自己试试去,注意的就是你把s:form 元素弄不好,就找不到action!