??xml version="1.0" encoding="utf-8" standalone="yes"?>国产AV无码专区亚洲AV蜜芽,亚洲综合区小说区激情区,亚洲男人天堂2020http://m.tkk7.com/bingle/category/14552.html最大的喜悦Q莫q于技术的q步 Q? 坚定梦想Q毕生追?zh-cnWed, 11 Apr 2007 14:14:18 GMTWed, 11 Apr 2007 14:14:18 GMT60[转]Ibatis开发Demohttp://m.tkk7.com/bingle/archive/2007/04/11/109931.html冰浪冰浪Wed, 11 Apr 2007 08:08:00 GMThttp://m.tkk7.com/bingle/archive/2007/04/11/109931.htmlhttp://m.tkk7.com/bingle/comments/109931.htmlhttp://m.tkk7.com/bingle/archive/2007/04/11/109931.html#Feedback0http://m.tkk7.com/bingle/comments/commentRss/109931.htmlhttp://m.tkk7.com/bingle/services/trackbacks/109931.html  阅读全文

冰浪 2007-04-11 16:08 发表评论
]]>
[转]Z不用spring、struts2、easyjweb{开源框?/title><link>http://m.tkk7.com/bingle/archive/2007/04/11/109876.html</link><dc:creator>冰浪</dc:creator><author>冰浪</author><pubDate>Wed, 11 Apr 2007 05:25:00 GMT</pubDate><guid>http://m.tkk7.com/bingle/archive/2007/04/11/109876.html</guid><wfw:comment>http://m.tkk7.com/bingle/comments/109876.html</wfw:comment><comments>http://m.tkk7.com/bingle/archive/2007/04/11/109876.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://m.tkk7.com/bingle/comments/commentRss/109876.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/bingle/services/trackbacks/109876.html</trackback:ping><description><![CDATA[     摘要: 该不该用各U各L开源框?我想q是很多E序员自׃困惑的问题。有的由于对框架的不熟悉Q有的是ZE序的优化,q有一些就是觉得开源框架用h不顺  <a href='http://m.tkk7.com/bingle/archive/2007/04/11/109876.html'>阅读全文</a><img src ="http://m.tkk7.com/bingle/aggbug/109876.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/bingle/" target="_blank">冰浪</a> 2007-04-11 13:25 <a href="http://m.tkk7.com/bingle/archive/2007/04/11/109876.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Java EE 5.0能取代StrutsQSpring和Hibernate吗?http://m.tkk7.com/bingle/archive/2007/03/28/107059.html冰浪冰浪Wed, 28 Mar 2007 12:32:00 GMThttp://m.tkk7.com/bingle/archive/2007/03/28/107059.htmlhttp://m.tkk7.com/bingle/comments/107059.htmlhttp://m.tkk7.com/bingle/archive/2007/03/28/107059.html#Feedback0http://m.tkk7.com/bingle/comments/commentRss/107059.htmlhttp://m.tkk7.com/bingle/services/trackbacks/107059.html阅读全文

冰浪 2007-03-28 20:32 发表评论
]]>
[转]Struts2与Struts1的对?http://m.tkk7.com/bingle/archive/2007/01/15/93966.html冰浪冰浪Mon, 15 Jan 2007 07:33:00 GMThttp://m.tkk7.com/bingle/archive/2007/01/15/93966.htmlhttp://m.tkk7.com/bingle/comments/93966.htmlhttp://m.tkk7.com/bingle/archive/2007/01/15/93966.html#Feedback0http://m.tkk7.com/bingle/comments/commentRss/93966.htmlhttp://m.tkk7.com/bingle/services/trackbacks/93966.htmlAction c?
?Struts1要求Actioncȝ承一个抽象基cRStruts1的一个普遍问题是使用抽象cȝE而不是接口?
?Struts 2 Actioncd以实C个Action接口Q也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类d?常用的接口。Action接口不是必须的,M有execute标识的POJO对象都可以用作Struts2的Action对象?
U程模式:
?Struts1 Action是单例模式ƈ且必LU程安全的,因ؓ仅有Action的一个实例来处理所有的h。单例策略限制了Struts1 Action能作的事Qƈ且要在开发时特别心。Action资源必须是线E安全的或同步的?
?Struts2 Action对象为每一个请求生一个实例,因此没有U程安全问题。(实际上,servlet容器l每个请求生许多可丢弃的对象,q且不会D性能和垃圑֛攉题)

Servlet 依赖:
?Struts1 Action 依赖于Servlet API ,因ؓ当一个Action被调用时HttpServletRequest ?HttpServletResponse 被传递给executeҎ?
?Struts 2 Action不依赖于容器Q允许Actionq容器单独被测试。如果需要,Struts2 Action仍然可以讉K初始的request和response。但是,其他的元素减或者消除了直接讉KHttpServetRequest ?HttpServletResponse的必要性?

可测?
?试Struts1 Action的一个主要问题是executeҎ暴露了servlet APIQ这使得试要依赖于容器Q。一个第三方扩展Q-Struts TestCaseQ-提供了一套Struts1的模拟对象(来进行测试)?
?Struts 2 Action可以通过初始化、设|属性、调用方法来试Q“依赖注入”支持也使测试更Ҏ?

捕获输入:
?Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须l承一个基cR因为其他JavaBean不能用作ActionFormQ开发者经常创建多余的cL莯入。动态BeanQDynaBeansQ可以作为创ZlActionForm的选择Q但是,开发者可能是在重新描q?创徏)已经存在的JavaBeanQ仍然会D有冗余的javabeanQ?
?Struts 2直接使用Action属性作入属性,消除了对W二个输入对象的需求。输入属性可能是有自??属性的rich对象cd。Action属性能够通过web面上的taglibs讉K。Struts2也支持ActionForm模式。rich对象cdQ包括业务对象,能够用作输入/输出对象。这UModelDriven Ҏ简化了taglib对POJO输入对象的引用?

表达式语aQ?
?Struts1 整合了JSTLQ因此用JSTL EL。这UEL有基本对象图遍历Q但是对集合和烦引属性的支持很弱?
?Struts2可以使用JSTLQ但是也支持一个更强大和灵zȝ表达式语aQ-"Object Graph Notation Language" (OGNL).

l定值到面QviewQ?
?Struts 1使用标准JSP机制把对象绑定到面中来讉K?
?Struts 2 使用 "ValueStack"技术,使taglib能够讉KD不需要把你的面QviewQ和对象l定h。ValueStack{略允许通过一pd名称相同但类型不同的属性重用页面(viewQ?
 
cd转换Q?
?Struts 1 ActionForm 属性通常都是Stringcd。Struts1使用Commons-Beanutilsq行cd转换。每个类一个{换器Q对每一个实例来说是不可配置的?
?Struts2 使用OGNLq行cd转换。提供基本和常用对象的{换器?

校验Q?
?Struts 1支持在ActionForm的validateҎ中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容Q但不能校验子对象?
?Struts2支持通过validateҎ和XWork校验框架来进行校验。XWork校验框架使用为属性类cd定义的校验和内容校验Q来支持chain校验子属?

Action执行的控Ӟ
?Struts1支持每一个模块有单独的Request ProcessorsQ生命周期)Q但是模块中的所有Action必须׃n相同的生命周期?
?Struts2支持通过拦截器堆栈(Interceptor StacksQؓ每一个Action创徏不同的生命周期。堆栈能够根据需要和不同的Action一起用?br />



冰浪 2007-01-15 15:33 发表评论
]]>
[转]刚刚出炉?Q-QJSF1.2新特?/title><link>http://m.tkk7.com/bingle/archive/2006/12/21/89205.html</link><dc:creator>冰浪</dc:creator><author>冰浪</author><pubDate>Thu, 21 Dec 2006 02:11:00 GMT</pubDate><guid>http://m.tkk7.com/bingle/archive/2006/12/21/89205.html</guid><wfw:comment>http://m.tkk7.com/bingle/comments/89205.html</wfw:comment><comments>http://m.tkk7.com/bingle/archive/2006/12/21/89205.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/bingle/comments/commentRss/89205.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/bingle/services/trackbacks/89205.html</trackback:ping><description><![CDATA[ <font size="2">注:此文{载自dev2devQ?a >http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=121&threadID=35942</a><br /><br /><br />最新翻译的Q?br /><br />               JSF1.2技术的新特性ȝ<br /><br />本文的主要内容:<br />  <br />    “Web Tier to Go With Java EE 5”系列文章中Q“JSF1.2新特性”是W一。就像在文中表述的一PJSP技术的优势随着JSF技术的发展得到了进一步的扩大Q这U优势是通过l一EL表达式徏立v来的。统一JSP的框架也是JSF1.2技术中众多重要成W之一Qƈ在JSR252规范下进行开发。除了这些变化ؓQJSF技术还贡献了大量的重要的容易用的Ҏ。这文章简要的描述一些重要的基本Ҏ,大概有如下几点:<br />* l一JSP技?br />  * 改进自定义信息的支持<br />* 提供状态保存特?br />* 能够关闭自动生成lg客户端ID<br />* 新的setPropertyActionListener标签<br />《JavaServer Faces规范》的前言部分提供了一l完成的Ҏ描q?br /><br />l一JSP技术:<br />      JSP和JSF技术相对立的核心是它们之间的页面生命周期的不同。在以前的文章中已经介绍了JSP规范QJSP规范指出Q页面的元素被执行显C时QJSP支持单一的“渲染-响应”生命周期, 然后立即渲染面。JSF的生命周期分成了多个阶段Q当一个组件树被创建完毕,lg的数据就会被处理Q然后组件被渲染q显C在面上。然而,一个JSF面q不需要在执行后立x染。因此,在JSP面上用的JSFlg被渲染时Q有时候ƈ不是按照正常的顺序完成,而且会丢q件的一些状态或者其他的问题产生?br />q么文章涉及到JSP2.1的新Ҏ。这里会从一?个方面详l的介绍JSF技术的改进的地方:<br />* 首先JSFlg支持JSTL的forEach标签<br />* 改进treelg创徏Ҏ和内容组l?br />* 反对只用JSF技术的ELQ赞成用统一的EL<br />       首先JSFlg支持JSTL的ForEach标签像在描qJSP技术新Ҏ的文章中表q的一PJava EE web层中的统一EL的一个新Ҏ就是:q代标签Q例如JSTL的forEach能够在JSFlg中直接用。例如,使用输入lg构徏一个简单的表格Q可以通过下列代码来实玎ͼ<br /><table><br /><tr><br /><th>Item Name</th><br />         <th>Item Price</th> <br /><th>Item Quantity</th><br /></tr><br /><c:forEach var="item" items="#{shoppingCart.items}"><br /><tr><br />        <td><h:outputText value="#{item.name}" /></td><br />        <td><h:outputText value="#{item.price}" /></td><br />        <td><h:inputText value="#{item.quantity}" /></td><br /></tr><br /></c:forEach><br /><h:commandButton value="update quantities" action="update" /><br /></table><br />没有l一使用ELQ?q几乎是不可能实现的?br /><br />改进treelg创徏Ҏ和内容组l?br /><br />       在Hans Bergsten的《article about the use of JavaServer Faces technology with JSP pages》文中写到的Q؜合用JSP代码和JSF标签有时候会产生预期不到的结果。例如,在下面的代码中,JSF lgoutputText输出的文本内容“Hi”本来应该在文本内容“what’s your name?”前面显C:<br /><h:panelGroup><br />          <h:outputText value="Hi. "/><br />             What's your name?<br />      </h:panelGroup><br />然而,q两行代码的输出是顺序是相反的。是什么导致了问题的发生?JSF的实现是以JSP的渲染引擎来渲染lg树的。因为JSP会立x行ƈ把静态文本内Ҏ在response中,?lt;panelGroup>的子节点标签直到相应的结束标{?lt;/panelGroup>匚w后才会被渲染Q所以“what’s your name?”就会在“Hi”之前显CZ?br />像这L问题在Hans Bergsten的文中已l提到ƈ在JSF1.2版本中得C修改。解x案包括:怎样改变lg树的创徏、各U内容的处理和渲染等{。最重要的改变如下几点:<br />* 创徏和渲染组件树被分?步,Z防止JSP引擎q早的渲染页面内宏V?br />* 所有的渲染器的rendersChildren属性值现在已l设计ؓ“true”,目的旉止联合组件的内容在各自的lg内部分别渲染?br />* 标签内部的静态内容对应的渲染器的rendersChildren属性D|ؓtrueQ目的是获取q保存一个短暂的UIOutputlgq把该组件添加到lg树中?br />* 状态管理器从ViewTag中移CViewHandler中,Z防止write State在实际保存过E中被调用?br />       在接下来的“Web Tier to Go With Java EE 5”系列文章中会提供更多的关于描述lg树的创徏和内容组l的l节Q这pJSF标签lg中用JSP代码成ؓ了可能?br /><br />反对只用JSF的ELQ赞成用统一的EL<br /><br />       如本文前面的内容介绍QJSP和JSF的EL表达式会整合成统一的EL。这意味着现在的JSF的EL是不推荐使用的。在介绍l一的EL前已l用了JSF开发的应用Q请务必做好h向后兼容的工作?br />       然而,Z利用l一EL的特性,你可能需要改变原来自定应的组件和自定义的标签。要UL到统一ELQ首先要把ValueBinding换成ValueExpressionQ把MethodBinding换成MethodException。这些改变都相对的容易,而且q有更好的办法可以完成这些改变。例如,因ؓ所有标准的标记属性都可以讉KD辑ּQ你的标记处理程序不需要检属性是可以接收、访问一个D辑ּ?br />      要了解更多关于如何移植到l一EL的内容,请参见文章“Unified Expression Language?http://java.sun.com/products/jsp/reference/techart/unifiedEL.html)<br /><br />改进易用性来支持自定义信?br /><br />      JSF1.2技术的一个重要改q就是在JSF应用中增加自定义信息的能力。这个改q包括如下几个方面:<br />* 一l新的标准{换信?br />* 对输入组件提供了新的属性:requiredMessage、converterMessage、validatorMessage<br />* 入组件提供了新的label属性,允许lg的名字中包含错误信息<br />* 提供新的资源l定元素在应用中l定资源?br /><br />一l标准的转换器信?br /><br />      以前的JSFl标准验证器提供了一l标准的错误信息。版?.2增加了标注{换器提供了一l错误信息。要查看q些信息Q请参考JSF1.2规范(http://jcp.org/en/jsr/detail?id=252)的第2.5.2.4节?br /><br />新属性:requiredMessage,converterMessage,validatorMessage<br /><br />      很多情况下,标准的错误提CZ息很适合为我们的需要。如果不合适,我们可以使用自定义的信息来覆盖这些标准的信息Q要完成个目的,是通过输入lg的新属性requiredMessage、converterMessage、validatorMessage来完成?br />      当你需要修改信息时Q新的特性允怽覆盖原有的信息。例如,假设你在userid和password2个域中用了验证长度的验证器。你希望一个错误信息提C“Userid必须?个字W”,另一个“Password必须?个字W”,但是你希望对q?个输入域使用同一个验证器。通过validatorMessage属性,你可以在适当的组件上讄Ҏ的信息,׃用ؓ每个验证器实例提供单独的提示信息?br />      q些属性接收字W型的g及D辑ּQ和JSF的标记属性一L工作原理。因此,你可以用D辑ּ来引用绑定资源中的信息,如下面的例子Q?br /><h:inputText value="#{customer.userID}" <br />              validatorMessage="#{customMessages.userIdMessage}" ><br />             <f:validateLongRange minimum="9" maximum="9"/><br />     </h:inputText><br />      像你猜想的一P输入lg的属性requiredMessageD盖了默认的信息提C。输入组件的属性converterMessageD盖了默认的{换信息提C。同LQ输入组件的属性validatorMessageg覆盖了默认的验证信息提示?br />      因ؓq种Ҏ,面开发h员现在可以更为合适的提供错误的提CZ息。这P用户能够更准的直到错误的根源?br /><br />输入lg的新属性:label<br /><br />      输入lg的label新属性是另外一个帮助用L认错误信息的重要Ҏ。许多由lg产生的标准错误信息包括根据参数得到的信息。输入组件的label属性值是用来适当取代相关的默认信息的。例如,下面的信息是与DateTimeConverter相关的信息,用DATE_ID标识Q?br />      {2}: "{0}" could not be understood as a date.<br />q就是说Q你有一个DateTimeConverter实例Qƈ与一个文本输入框l定。设|输入组件的label属性ؓBirthDate。如果用户在文本输入框中输入“older than the hills”,转换器就p|了。当面再次被渲染的时候,用户p看到如下的信息提C:<br />      Birth Date: "older than the hills" could not be understood as a date.<br />      <br />     Labellg接受文本内容Q也接受D辑ּ。所以,在用其他的JSF标签属性时Q你可以使用表达式来引用l定的资源文件内宏V?br /><br />新的资源配置元素<br /><br />      JSF1.2版本以前的规范,面开发h员用loadBundle标签来引用资源文Ӟ从而达到本地化的目的。在新的1.2版本中,面开发h员一样可以在面中用资源绑定?br />更高效率的装载绑定好的资源,包括在应用系l的配置文g中用资源绑定元素进行注册资源的l定Q新的规范提供了一个很好的入口方式。下面的资源l定元素注册一个叫做“CustomMessages的ResourceBundlec,q个cd在应用系l的资源包里Q?br /><resource-bundle><br />         <var>customMessages</var><br />         <base-name>resources.CustomMessages</base-name><br />     </resource-bundle><br />var子元素定义了资源引用名称Q页面开发h员在开发页面时可以采用如下的方式进行调用:<br /><h:outputText value="#{customMessages.myText}" /><br />      在这个例子中QmyText是定义在资源文件中Q我们要引用的信息的键(keyQ?br />通过q个新的资源l定元素Q我们可以在应用pȝ中绑定更多的资源文g。这样做Q新的元素的使用Q不仅消除了在多个页面用“loadBundle”绑定资源的方式Q而且大大提高了性能Q因载资源是很“昂贵”的操作?br /><br />提供状态保存特?br /><br />       JSF1.2版本在状态管理方面主要有2个变化。一个变化是Q当应用pȝ使用多个框架QframeQ或者窗?window)Ӟ整合pȝ状态的不稳定问题;另一个变化是提供了客L安全状态操作?br />      在多框架或者多H口的应用中pȝ状态不E_的原因是q些复杂逻辑试图会把根视囄ID重复复制Q因此状态管理就变得混ؕ了。在1.2版本中做了一些修改,提供了一些状态管理的API来解册个问题?br />      首先Q在视图中的每一个窗口(WindowQ或者框ӞFrameQ都有唯一的ID标识Q这个ID标识是视图根ID和一个随x据联合组成,q保存在一个隐藏域中,用来q接H口QWindowQ或者框ӞFrameQ。ViewHandler中的writeStateҎ已经被修改,q用来生成唯一的IDQƈ且在JSF的“渲染-回应”阶D输出到客户端。另外,encodeEndҎ中,UIForm也被修改Q让它在输出“闭合标{䏀到客户端的q个q程之前调用writeStateҎQ以便多表单QformQ的状态被保存下来?br />      同时Q在物理“渲染-回应“阶D,StateManager提供了最新的saveSerializedViewҎ会用这个唯一的ID把对应的视图序列化到Session中。例如:如果服务器崩溃了Q这些被保存的状态就能在另一个服务器中再ơ用。所以,“状态-保存”机制在JSF1.2版本在中被高度有效的支持。最后,ViewHandlercM的restoreViewҎ可以使用唯一的ID来标识恢复视图,即是在“恢复视䏀阶Dc?br />     另一个重要的规定Q就是允许对客户端进行加密,包括在发送一个关闭标{ֈ客户端之前。你可以选择声明的方式对客户端进行加?使用ClientStateSavingPasswordq个cM为加密方式的入口Q如下所C:<br /><env-entry><br />             <env-entry-name><br />                     com.sun.faces.ClientStateSavingPassword<br />             </env-entry-name><br />             <env-entry-value>somePassword</env-entry-value><br />             <env-entry-type>java.lang.String</env-entry-type><br />     </env-entry><br />       你提供的密码通常是生??对的方式q行加密。如果这个环境入口没有在配置文g中定义,q个加密Ҏ׃会被执行?br /><br />关闭自动生成客户端组件ID的功?br /><br />      JSF采用一U算法来生成客户端组Ӟ包含在Form中)的表C号QIDQ,客户端组件的ID如下面的形式Q?br />           [form ID]:[clientID]<br />      面开发h员可以对指定ID的formlg或者包含在该form中的其他lgq行操作。如果页面开发h员没有指定form的IDh者组件的IDP那么pȝ会自动生成?br />      早期版本的JSF规范没有规定q个法Q只要开发h员理解其工作原理够了。此外,对于自定义的lg或者一个渲染类来说Q页面开发h员没办法定是否已经讄了组件的客户端IDh者是否系lؓ它们自动生成。最后,因ؓ某种原因Q渲染器的开发h员可能无法改变它的名Uͼ但是仍然要在JavaScript中引用它?br />      最后的JSF规范明确的说明了生成客户端组件ID的算法。我们可以在UIComponent的API文档中找到相关信息。由于UIFormlg增加了prependId属性,相应的算法也做了变化。页面开发h员现在可以改变该属性的默认|默认gؓfalseQ可以改为trueQ,q样p明可以不需要用Form的ID作ؓlgID的前~了。下表格昄了正常情况下生成客户端组件ID的不同点Q?br /><br />Table 1:客户端组件ID生成情况<br /><br />场景                                     prependId=rue prependID=alse <br />开发h员没有设|ID                     _id0:_id1          _id1 <br />开发h员仅仅设|了form的ID myForm:_id0 _id0 <br />开发h员只讄lgID          _id0:myComponent myComponent <br />开发h员对form和组仉讄了ID myForm:myComponent myComponent <br /><br />新标{setPropertyActionListener<br /><br />      除了actionListener标签之外Q允许我们给自定义的lg注册一个Action ListenerQ核心的标记库现在已l包括在setPropertyActionListener标记中。用q个标记注册一个特定的action listener到ActionSource实例中,q与具体的组件关联v来。当lg被激z,listener׃把对象的引用存储到标记的属性中?br />      Z展示标记的用处,假设我们有一个forEach标记Qƈ且在其中使用了commandButtonQ以及用iterator来显CZl书的信息,代码如下Q?br /><c:forEach items="#{bookDBAO.books}" var="book" varStatus="stat"><br />          <c:set var="book" scope="request" value="${book}"/><br />          ...<br />          <h:commandButton id="add" action="#{catalog.add}"<br />                 value="#{bundle.CartAdd}">    <br />                 <f:setPropertyActionListener <br />                        target="#{requestScope.book}"<br />                        value="#{book}"/><br />          </h:commandButton><br />          <c:remove var="book" scope="request"/><br />     </c:forEach><br />当用L击buttonQ选择的book׃增加到购物R中,q且昄下一c?br />如果你熟悉JSTLQ那你就直到forEach的var属性是在本面那有效的。然而,book的数据需要在request范围内有效,q样昄面Q点d转到的下一面Q才能范问到book的数据。因此,setPropertyActionListener标签通常用来把当前(bookQ对象设|ؓrequest讉K范围内?br />       在这个例子中QsetPropertyActionListener标签的value属性指的是“book”对象;target属性是表达式“requestScope.book”的引用Qƈ且和commandButtonlg建立了关联?br /><br /><br />ȝ<br /><br />      q篇文章只是JSF1.2规范的简要说明,介绍一些新的特性和常见问题的解x法。我们徏议大家用一下JSF1.2。如果你有一些问题或者看法,请发邮gQusersQjavaserverfaces.dev.java.netQ给我们或者加入我们的C֌(http://java.sun.com/j2ee/javaserverfaces)。同Ӟ期待下一文章在我们的网站上出现?br /></font> <img src ="http://m.tkk7.com/bingle/aggbug/89205.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/bingle/" target="_blank">冰浪</a> 2006-12-21 10:11 <a href="http://m.tkk7.com/bingle/archive/2006/12/21/89205.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>受控bean与实体bean的数据传?/title><link>http://m.tkk7.com/bingle/archive/2006/09/25/71721.html</link><dc:creator>冰浪</dc:creator><author>冰浪</author><pubDate>Mon, 25 Sep 2006 05:51:00 GMT</pubDate><guid>http://m.tkk7.com/bingle/archive/2006/09/25/71721.html</guid><wfw:comment>http://m.tkk7.com/bingle/comments/71721.html</wfw:comment><comments>http://m.tkk7.com/bingle/archive/2006/09/25/71721.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://m.tkk7.com/bingle/comments/commentRss/71721.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/bingle/services/trackbacks/71721.html</trackback:ping><description><![CDATA[ <p> <font size="2">q些日子在用JSFQHibernatel合来实C单应用——留a本?br /><br />         思\如下Q?br />         用JSF作ؓView层,Hibernate实现 Model层即数据持久化,而Control层则采用POJOQ即JavaBean?br /><br />         在model层,用hibernate生成持久化对象,作ؓ与数据库间数据交互的“介质对象”(自己命名的,呵呵Q。如留言信息cMessage.classQ这也是POJOQ即实体beanQ所含方法只是setter/getter。但其却与DB表中数据cd相对应的?br /><br />         在view层JSF中,与页面显C组件进行值绑定的受控bean承担了数据显CZ操作的Q务。在此应用中Q如MessageBean.classQ这是与hibernate中的Message.classq一实体bean相对应的?br /><br />         Z么不直接使用实体bean作ؓview层的数据昄对象呢?q是因ؓ在MVC模式中,M两层间都应该是“松藕合”状态,而不产生怺依赖的情形?br /><br />         既然如此Q受控bean与实体bean之间又如何实现数据的传递呢Q?br /><br />         在control层中Q徏立一个MessageBuilder.classc,来实Cbean间的交互Q这个类中主要利用了org.apache.commons.beanutils.BeanUtilscȝcopyPropertiesҎ来实现。MessageBuilder.java的具体实C码如下:<br /><br />//**********MessageBuilder.java的具体实C码begin**************<br />package efan5.myguestbook.control;</font> </p> <p> <font size="2">import java.lang.reflect.InvocationTargetException;<br /></font> <font size="2">import org.apache.commons.beanutils.BeanUtils;</font> </p> <p> <font size="2">import efan5.myguestbook.model.Message;<br />import efan5.myguestbook.view.MessageBean;</font> </p> <p> <font size="2">public class MessageBuilder {<br /> <br /> public MessageBuilder(){}<br /> <br /> public static Message createMessage(MessageBean messageBean){<br />  Message message = new Message();<br />  try {<br />   BeanUtils.copyProperties(message, messageBean);<br />  } catch (IllegalAccessException e) {<br />   <br />   e.printStackTrace();<br />  } catch (InvocationTargetException e) {<br />      e.printStackTrace();<br />  }<br />  return message;<br /> }<br /> <br /> public static MessageBean createMessageBean(Message message){<br />  MessageBean messageBean = new MessageBean();<br />  try {<br />   BeanUtils.copyProperties(messageBean,message);<br />  } catch (IllegalAccessException e) {<br />   <br />   e.printStackTrace();<br />  } catch (InvocationTargetException e) {<br />      e.printStackTrace();<br />  }<br />  return  messageBean;<br /> }</font> </p> <p> <font size="2">}<br />//**********MessageBuilder.java的具体实C码end**************<br /><br />         q就实现了受控bean与实体bean的数据交互?br />         PSQBeanUtils.copyProperties(obj1,obj2) Ҏ要对象obj1,obj2中的相对应的属性的名字和数据类型一_否则会生数据类型不匚w的异常。但q不是要求属性数目一致?/font> </p> <img src ="http://m.tkk7.com/bingle/aggbug/71721.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/bingle/" target="_blank">冰浪</a> 2006-09-25 13:51 <a href="http://m.tkk7.com/bingle/archive/2006/09/25/71721.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://m.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://yiren2233.com" target="_blank">AV߹ۿ</a>| <a href="http://mangaou.com" target="_blank">99þþƷձһ</a>| <a href="http://bwgdbjb.com" target="_blank">ůůѸձһ</a>| <a href="http://srztw.com" target="_blank">޹˾Ʒһ</a>| <a href="http://tttui.com" target="_blank">þۺϸϾþù</a>| <a href="http://117949b.com" target="_blank">AVAVպAVվ</a>| <a href="http://778002.com" target="_blank">һƵ</a>| <a href="http://yaojing123.com" target="_blank">Ƶ߹ۿ</a>| <a href="http://zddzbp.com" target="_blank">þþþޱٸ</a>| <a href="http://zjlxblog.com" target="_blank">ڳ߿</a>| <a href="http://sewuji.com" target="_blank">freežž</a>| <a href="http://05942688.com" target="_blank">ҹӰ߹ۿ</a>| <a href="http://aierphoto.com" target="_blank">պϵ</a>| <a href="http://www-15706.com" target="_blank">ëƬѲ</a>| <a href="http://91ptv.com" target="_blank">av֮˵վ</a>| <a href="http://qulu999.com" target="_blank">ĻѲ</a>| <a href="http://33338x.com" target="_blank">޼Ļ</a>| <a href="http://www-63228.com" target="_blank">߹ۿ</a>| <a href="http://bjhuicui.com" target="_blank">޹bvվ</a>| <a href="http://yongyihongze.com" target="_blank">ëƬƵվۿ</a>| <a href="http://kdltuliao.com" target="_blank">AVۺɫһ</a>| <a href="http://yuntuzy.com" target="_blank">xxxxx</a>| <a href="http://carsmp.com" target="_blank">Ƶ߹ۿ</a>| <a href="http://miliwo.com" target="_blank">ר˿ŵƵ</a>| <a href="http://nnlxl.com" target="_blank">wwwxxx</a>| <a href="http://4eeyy.com" target="_blank">ȫaһëƬ˰</a>| <a href="http://445848.com" target="_blank">AëƬþ</a>| <a href="http://haichuanwangluo.com" target="_blank">avպav߳</a>| <a href="http://nit8.com" target="_blank">Ůվ91ɫ</a>| <a href="http://www91pao.com" target="_blank">һëƬֱ</a>| <a href="http://www-887234.com" target="_blank">Ʒ߲ҳ</a>| <a href="http://tianwu520.com" target="_blank">ƬaëƬ</a>| <a href="http://52099jy.com" target="_blank">žžþþƷѿС˵ </a>| <a href="http://6363388.com" target="_blank">˳վɫ</a>| <a href="http://pjappuiehjdkhsjkssd2.com" target="_blank">ҹþþþþ</a>| <a href="http://6711wan.com" target="_blank">պëƬ</a>| <a href="http://jack-fx.com" target="_blank">Ʒ97˳Ƶ</a>| <a href="http://am3736.com" target="_blank">AVһӰƬ</a>| <a href="http://avqq222.com" target="_blank">޹ƷYW߹ۿ </a>| <a href="http://2499m.com" target="_blank">ѨƬ߹ۿͬѧ </a>| <a href="http://wusongtv.com" target="_blank">99ƵȫѾƷȫĻ </a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>