??xml version="1.0" encoding="utf-8" standalone="yes"?>
1. 最原始的Struts2会直接赋值Action中的变量?如hello.action?id=1Q会action中的id属性赋倹{?br />
2. 如果参数较多Q而且都属于同一个对象的Q可以将所有属性都攑օ一个对象中Q比如hello.action?user.id
会ؓaction中的User对象的id属性赋倹{?br />
3. ModelDriven接口Q如果不惛_太多"user."前缀Q如${user.id}Q可以实现ModelDriven接口的getModel函数Q?br />
q回user对象。则Struts2到{id}Ӟ׃试调用getModel() 获得user对象再获取其id属性?br />
4. Prepareable接口Q还有一U情况Hibernate常用的情况,一个对象可能有很多属?比如?0个属?Q?br />
但页面上可能只显C?个属性的输入框。如果按上面的方法,先new一个Userc,然后从页面上赋倹{?br />
保存此对象时׃不在页面上修改?个属性清IZ。这时就需要两ơ的bindingQ一开始user变量为空Q?br />
只绑定了action的id属性,然后在prepare()函数中查出有完整10个属性的对象Q然后二ơ绑定时再将面的那5个属?br />
复制到user对象中?br />
prepare()函数有两U作用,一U专门ؓ了二ơbindingQ一U是作ؓ公共的数据准备函数。但是,
一个action内有多个methodQ不是每一个method都需要执行prepareQ比如list()ҎQ如果这Umethod较多Q?br />
或者会造成冲突Ӟq有另外一U方式来定义二次binding函数。比如prepareSave() 函数Q就会默认的在执行save()
前执行,此时Q专门实现prePareMethodName() Ҏ再调度一个内部的prepare函数Q而将prepare()函数留空?/p>
1.索和用户h匚w的ActionMapping实例Q如果不存在Q就q回用户h路径无效信息Q?/p>
2.如果ActionForm实例不存在,创Z个ActionForm对象q在其中保存客户提交的表单内容;
3.Ҏ配置信息军_是否调用ActionForm的validate()ҎQ?/p>
4.如果ActionForm的validate()Ҏq回null或返回一个不包含ActionMessage的ActionErrors对象Q就表示表单验证成功Q?/p>
5.ActionServletҎActionMapping实例包含的映信息将h转发lActionQ如果Action实例不存在,先创徏Action实例Q,然后调用Action的excute()ҎQ?/p>
6.Action的excute()Ҏq回一个ActionForward对象QActionServlet再把客户h转发lActionForward对象指向的JSPlgQ?/p>
7.ActionForward对象指向的JSPlg生成动态网,q回l客戗?/p>
对于以上程4Q如果ActionForm的validate()Ҏq回一个或多个包含ActionMessage的ActionErrors对象Q就表示表单验证p|Q此时ActionServlet直接把h转发l包含用h交表单的JSPlg?/p>
struts2代码始于webwork2.2.3Q少许的比较大的改动可能会媄响你的webwork2.2应用的移?/p>
1、一些被Deprecated掉的Ҏ和类已经被移除,q包?font face="Arial">XWork Inversion of Control (IoC) 框架?/font>
2、用xhtml 主题的一些工具库被DOJO的工L件替代?/p>
3、用FCK editor?font face="Arial">rich text editor lg被DOJO?font face="Arial">rich text editor 替代Q因为LGPL许可的原因?/font>
4?font face="Arial">date pickerlg也由于LGPL许可的原因被DOJO?font face="Arial">date pickerlg替代Q不q地QDOJO?font face="Arial">date pickerlg不支持国际化?/font>
感觉3有点可惜QFCK Editorq是很好用的?/p>
com.opensymphony.webwork 替换?org.apache.struts2.
com.opensymphony.xwork 替换?com.opensymphony.xwork2.
?webwork.properties 重命名ؓ struts.properties.
?/font> xwork.xml t重命名ؓ struts.xml.
struts.properties和struts.xml 中出现的所有webwork替换成struts
web.xml中,?font face="Arial">com.opensymphony.webwork.dispatcher.FilterDispatcher 替换?org.apache.struts2.dispatcher.FilterDispatcher
如果您用的转换器承了 WebworkTypeConverter, 超c重命名?StrutsTypeConverter?/font>
您必d标签URI uri="/webwork" 替换?uri="/struts-tags"
打完、收工,基本上可以测试发布了?/p>
当然JDK5能用上的话最好的Q对J4的支持,没有试q?/p>
另外Q在使用中发现struts2支持struts1中的通配W配|,struts2相对于struts1Q有了很大的变化Q这归功于interceptor的用和OGNL和ؓ用户着想的设计Q用struts2能很明显地提高生产力。希望webworkl过apache的重新打造后能发扬光大?/p>
bean:define
定义变量赋值有三种方式Q?br />1。设|value属性,此时id属性定义的变量为字W串Qvalue属性代表这个变量的字符串倹{?br /> <bean:defind id="userName" value="jing" />
UserName: <bean:write name="userName"/>
2。同时设|name和property属性。name属性指定一个已l存在的Bean?br />Property属性指定已l存在的Bean的某个属性。id属性定义的变量的值由property属性决定?br /> <%request.setAttribute("sessionBean",session);%>
<bean:defind id="theSession" name="sessionBean" property="servletContext"/>
ServletContext Name: <bean:write name="theSession" property="servletContextName"/>
3。同时设|name和type属性?br /><bean:defind id="loginBean" name="loginBean" type="com.jason.action.LoginBean"/>
<bean:write name="loginBean" property="password"/>
bean:size
用于获得MapQCollection的长?id指定一个Integercd的变?name指定已经存在的mapQcollection或者数l?br /><%
HashMap lines = new HashMap();
lines.put("1","Line 1");
lines.put("2","Line 2");
lines.put("3","Line 3");
request.setAttribute("lines",lines);
%>
<bean:size id="length" name="lines"/>
<bean:write name="length"/>