﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-把永恒在一刹那间收藏-文章分类-struts</title><link>http://www.blogjava.net/gm_jing/category/13230.html</link><description>生活之点点滴滴</description><language>zh-cn</language><lastBuildDate>Sat, 19 Feb 2011 02:53:04 GMT</lastBuildDate><pubDate>Sat, 19 Feb 2011 02:53:04 GMT</pubDate><ttl>60</ttl><item><title>struts2 参数绑定和二次绑定【转】</title><link>http://www.blogjava.net/gm_jing/articles/344562.html</link><dc:creator>黎夕</dc:creator><author>黎夕</author><pubDate>Thu, 17 Feb 2011 10:03:00 GMT</pubDate><guid>http://www.blogjava.net/gm_jing/articles/344562.html</guid><wfw:comment>http://www.blogjava.net/gm_jing/comments/344562.html</wfw:comment><comments>http://www.blogjava.net/gm_jing/articles/344562.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gm_jing/comments/commentRss/344562.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gm_jing/services/trackbacks/344562.html</trackback:ping><description><![CDATA[<p>无论是将Action中的变量渲染页面中，或者从request中将内容回传到Action中变量的过程，统称参数绑定。&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp; 1. 最原始的Struts2会直接赋值Action中的变量。 如hello.action?id=1，会将action中的id属性赋值。<br />
&nbsp;&nbsp; 2. 如果参数较多，而且都属于同一个对象的，可以将所有属性都放入一个对象中，比如hello.action?user.id <br />
&nbsp;&nbsp; 会为action中的User对象的id属性赋值。<br />
&nbsp;&nbsp; 3. ModelDriven接口，如果不想写太多"user."前缀，如${user.id}，可以实现ModelDriven接口的getModel函数，<br />
&nbsp;&nbsp; 返回user对象。则Struts2碰到{id}时，就会尝试调用getModel() 获得user对象再获取其id属性。<br />
&nbsp;&nbsp; 4. Prepareable接口，还有一种情况Hibernate常用的情况，一个对象可能有很多属性(比如有10个属性)，<br />
&nbsp;&nbsp; 但页面上可能只显示5个属性的输入框。如果按上面的方法，先new一个User类，然后从页面上赋值。<br />
&nbsp;&nbsp; 保存此对象时就会将不在页面上修改的5个属性清空了。这时就需要两次的binding，一开始user变量为空，<br />
&nbsp;&nbsp; 只绑定了action的id属性，然后在prepare()函数中查出有完整10个属性的对象，然后二次绑定时再将页面的那5个属性<br />
&nbsp;&nbsp; 复制到user对象中。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prepare()函数有两种作用，一种专门为了二次binding，一种是作为公共的数据准备函数。但是，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一个action内有多个method，不是每一个method都需要执行prepare，比如list()方法，如果这种method较多，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 或者会造成冲突时，还有另外一种方式来定义二次binding函数。比如prepareSave() 函数，就会默认的在执行save()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 前执行，此时，专门实现prePareMethodName() 方法再调度一个内部的prepare函数，而将prepare()函数留空。</p>
<img src ="http://www.blogjava.net/gm_jing/aggbug/344562.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gm_jing/" target="_blank">黎夕</a> 2011-02-17 18:03 <a href="http://www.blogjava.net/gm_jing/articles/344562.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts的工作流程</title><link>http://www.blogjava.net/gm_jing/articles/108002.html</link><dc:creator>黎夕</dc:creator><author>黎夕</author><pubDate>Mon, 02 Apr 2007 08:27:00 GMT</pubDate><guid>http://www.blogjava.net/gm_jing/articles/108002.html</guid><wfw:comment>http://www.blogjava.net/gm_jing/comments/108002.html</wfw:comment><comments>http://www.blogjava.net/gm_jing/articles/108002.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gm_jing/comments/commentRss/108002.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gm_jing/services/trackbacks/108002.html</trackback:ping><description><![CDATA[<p><strong>Struts的工作流程：</strong>对于采用Struts框架的web应用，在web应用启动时会加载并初始化ActionServlet，ActionServlet从struts-config.xml中读取配置信息，把它们存放到各种配置对象中，例如把Action的映射信息存放在ActionMapping对象中。当ActionServlet接收到客户请求时，执行以下流程：</p>
<p>1.检索和用户请求匹配的ActionMapping实例，如果不存在，就返回用户请求路径无效信息；</p>
<p>2.如果ActionForm实例不存在，就创建一个ActionForm对象并在其中保存客户提交的表单内容；</p>
<p>3.根据配置信息决定是否调用ActionForm的validate()方法；</p>
<p>4.如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActionErrors对象，就表示表单验证成功；</p>
<p>5.ActionServlet根据ActionMapping实例包含的映射信息将请求转发给Action（如果Action实例不存在，就先创建Action实例），然后调用Action的excute()方法；</p>
<p>6.Action的excute()方法返回一个ActionForward对象，ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件；</p>
<p>7.ActionForward对象指向的JSP组件生成动态网页，返回给客户。</p>
<p>对于以上流程4，如果ActionForm的validate()方法返回一个或多个包含ActionMessage的ActionErrors对象，就表示表单验证失败，此时ActionServlet将直接把请求转发给包含用户提交表单的JSP组件。</p>
<img src ="http://www.blogjava.net/gm_jing/aggbug/108002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gm_jing/" target="_blank">黎夕</a> 2007-04-02 16:27 <a href="http://www.blogjava.net/gm_jing/articles/108002.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从webwork2.2应用到struts2的移植</title><link>http://www.blogjava.net/gm_jing/articles/106394.html</link><dc:creator>黎夕</dc:creator><author>黎夕</author><pubDate>Mon, 26 Mar 2007 06:25:00 GMT</pubDate><guid>http://www.blogjava.net/gm_jing/articles/106394.html</guid><wfw:comment>http://www.blogjava.net/gm_jing/comments/106394.html</wfw:comment><comments>http://www.blogjava.net/gm_jing/articles/106394.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gm_jing/comments/commentRss/106394.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gm_jing/services/trackbacks/106394.html</trackback:ping><description><![CDATA[
		<h4>一、变化</h4>
		<p>struts2代码始于webwork2.2.3，少许的比较大的改动可能会影响你的webwork2.2应用的移植</p>
		<p>1、一些被<font face="Arial">Deprecated掉的方法和类已经被移除，这包括<font face="Arial">XWork Inversion of Control (IoC) 框架。</font></font></p>
		<p>2、使用xhtml 主题的一些工具库被DOJO的工具组件替代。</p>
		<p>3、使用FCK editor的<font face="Arial">rich text editor 组件被DOJO的<font face="Arial">rich text editor 替代，因为LGPL许可的原因。</font></font></p>
		<p>4、<font face="Arial">date picker组件也由于LGPL许可的原因被DOJO的<font face="Arial">date picker组件替代，不幸地，DOJO的<font face="Arial">date picker组件不支持国际化。</font></font></font></p>
		<p>感觉3有点可惜，FCK Editor还是很好用的。</p>
		<h4>二、移植。</h4>
		<h5>1、包名</h5>
		<p>
				<font face="Arial">将 com.opensymphony.webwork 替换成 org.apache.struts2.<br />将com.opensymphony.xwork 替换成 com.opensymphony.xwork2.</font>
		</p>
		<h5>2、配置文件</h5>
		<p>
				<font face="Arial">将 webwork.properties 重命名为 struts.properties.<br /><font face="Arial">将</font> xwork.xml t重命名为 struts.xml.</font>
		</p>
		<p>
				<font face="Arial">将struts.properties和struts.xml 中出现的所有webwork替换成struts</font>
		</p>
		<p>web.xml中，将<font face="Arial">com.opensymphony.webwork.dispatcher.FilterDispatcher 替换为 org.apache.struts2.dispatcher.FilterDispatcher</font></p>
		<h5>3、转换器</h5>
		<p>
				<font face="Arial">如果您使用的转换器继承了 WebworkTypeConverter, 将超类重命名为 StrutsTypeConverter。</font>
		</p>
		<h5>4、JSP文件</h5>
		<p>您必须将标签URI <font face="Arial">uri="/webwork"　替换为 uri="/struts-tags"</font> </p>
		<p>打完、收工，基本上可以测试发布了。</p>
		<p>当然JDK5能用上的话最好的，对J4的支持，没有测试过。</p>
		<p> </p>
		<p>另外，在使用中发现struts2支持struts1中的通配符配置，struts2相对于struts1，有了很大的变化，这归功于interceptor的使用和OGNL和为用户着想的设计，使用struts2能很明显地提高生产力。希望webwork经过apache的重新打造后能发扬光大。</p>
<img src ="http://www.blogjava.net/gm_jing/aggbug/106394.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gm_jing/" target="_blank">黎夕</a> 2007-03-26 14:25 <a href="http://www.blogjava.net/gm_jing/articles/106394.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts标签</title><link>http://www.blogjava.net/gm_jing/articles/60004.html</link><dc:creator>黎夕</dc:creator><author>黎夕</author><pubDate>Tue, 25 Jul 2006 06:52:00 GMT</pubDate><guid>http://www.blogjava.net/gm_jing/articles/60004.html</guid><wfw:comment>http://www.blogjava.net/gm_jing/comments/60004.html</wfw:comment><comments>http://www.blogjava.net/gm_jing/articles/60004.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gm_jing/comments/commentRss/60004.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gm_jing/services/trackbacks/60004.html</trackback:ping><description><![CDATA[
		<p>【struts标签】</p>
		<p>bean:define<br />定义变量赋值有三种方式：<br />1。设置value属性，此时id属性定义的变量为字符串，value属性代表这个变量的字符串值。<br /> &lt;bean:defind id="userName" value="jing" /&gt;<br /> UserName: &lt;bean:write name="userName"/&gt;</p>
		<p>2。同时设置name和property属性。name属性指定一个已经存在的Bean。<br />Property属性指定已经存在的Bean的某个属性。id属性定义的变量的值由property属性决定。<br />  &lt;%request.setAttribute("sessionBean",session);%&gt;<br /> &lt;bean:defind id="theSession" name="sessionBean" property="servletContext"/&gt;<br /> ServletContext Name: &lt;bean:write name="theSession" property="servletContextName"/&gt;</p>
		<p>3。同时设置name和type属性。<br />&lt;bean:defind id="loginBean" name="loginBean" type="com.jason.action.LoginBean"/&gt;<br />&lt;bean:write name="loginBean" property="password"/&gt;<br /><br /><br /><br />bean:size<br />用于获得Map，Collection的长度,id指定一个Integer类型的变量,name指定已经存在的map，collection或者数组。<br />&lt;%<br />HashMap lines = new HashMap();<br />lines.put("1","Line 1");<br />lines.put("2","Line 2");<br />lines.put("3","Line 3");<br />request.setAttribute("lines",lines);<br />%&gt;<br />&lt;bean:size id="length" name="lines"/&gt;<br />&lt;bean:write name="length"/&gt;</p>
<img src ="http://www.blogjava.net/gm_jing/aggbug/60004.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gm_jing/" target="_blank">黎夕</a> 2006-07-25 14:52 <a href="http://www.blogjava.net/gm_jing/articles/60004.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>