??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美在线一级视频,在线中文一区,日韩在线国产精品http://www.aygfsteel.com/konhon/category/3028.html忘掉過去Q展望未來。找回自我,越自我? <br> <b>逃避不一定躲的过, 面对不一定最难过, 孤单不一定不快乐, 得到不一定能长久, 失去不一定不再拥? 可能因ؓ某个理由而伤心难q? 但我却能找个理由让自己快?</b><br><p> <!-- Search Google --> <left> <form method="get" action="http://www.google.com/custom" target="google_window"> <table> <tr><td nowrap="nowrap" valign="top" align="left" height="32"> <a > <img src="http://www.google.com/logos/Logo_25wht.gif" border="0" alt="Google" align="middle"></img></a> <input type="text" name="q" size="31" maxlength="255" value=""></input> <input type="submit" name="sa" value="搜烦"></input> <input type="hidden" name="client" value="pub-5408663347953425"></input> <input type="hidden" name="forid" value="1"></input> <input type="hidden" name="ie" value="UTF-8"></input> <input type="hidden" name="oe" value="UTF-8"></input> <input type="hidden" name="cof" value="GALT:#008000;GL:1;DIV:#336699;VLC:663399;AH:center;BGC:FFFFFF;LBGC:336699;ALC:0000FF;LC:0000FF;T:000000;GFNT:0000FF;GIMP:0000FF;FORID:1;"></input> <input type="hidden" name="hl" value="zh-CN"></input> </td></tr></table> </form> </left> <!-- Search Google --> zh-cnTue, 27 Feb 2007 11:06:55 GMTTue, 27 Feb 2007 11:06:55 GMT60spring xdoclethttp://www.aygfsteel.com/konhon/archive/2006/12/06/85762.htmlkonhon 优华konhon 优华Wed, 06 Dec 2006 02:05:00 GMThttp://www.aygfsteel.com/konhon/archive/2006/12/06/85762.htmlhttp://www.aygfsteel.com/konhon/comments/85762.htmlhttp://www.aygfsteel.com/konhon/archive/2006/12/06/85762.html#Feedback0http://www.aygfsteel.com/konhon/comments/commentRss/85762.htmlhttp://www.aygfsteel.com/konhon/services/trackbacks/85762.html spring xdoclet使用
手工书写spring-beans.xml非常J琐Q而且如果多个E序员同时进行一个项目的时候,即分成多个spring文gQ也很容易会产生冲突Q更别说l常遇到的错误和E序升问题了,q好最新的Xdoclet可以帮助我们解决q个烦恼Q在最新的Xdoclet中已l包含了对srping的支持,即srpingdoclet。如下是例子Q?

1、下载antQ从jakarta.apache.org
安装在c:\dev\antQ安装过E就不详l说了,如果ant都不懂,那看来您有些落伍了,也先别往下看了,学习一下ant?

2、下载xdocletQ当然是xdoclet.sf.net了,下蝲后把lib的东西放|到
c:\dev\ant\lib\xdoclet

3、java 代码
只是个例子而已
===================================================================
XdocletMain.java :
===================================================================
代码:

/**
 * Created by IntelliJ IDEA.
 * User: wangzy
 * Date: 2004-12-5
 * @spring.bean
 *  id="XdocletMain"
 *  singleton="true"
 * 上述说明,q是个spring的beanQid为XdocletMainQ如果看不懂Q再补习一下xdoclet
 * @spring.property
 *      name="bean1"
 *      ref="Bean1"
 * 上述说明Q有个bean1属性,兌的ؓBean1的springlg
 * @spring.property
 *     name="bean2"
 *     ref="Bean2"
 * 同上
 */
public class XdocletMain {

    public Bean1 getBean1() {
        return bean1;
    }

    public void setBean1(Bean1 bean1) {
        this.bean1 = bean1;
    }

    public Bean2 getBean2() {
        return bean2;
    }

    public void setBean2(Bean2 bean2) {
        this.bean2 = bean2;
    }

    private Bean1 bean1 = null;

    private Bean2 bean2 = null;
   
}

===================================================================

Bean1.java :
===================================================================
代码:

/**
 * Created by IntelliJ IDEA.
 * User: wangzy
 * Date: 2004-12-5
 * @spring.bean
 *      id="Bean1"
 *      singleton="true"
 * 声明一个Bean1的springlg
 */
public class Bean1 {
   
}

===================================================================
Bean2.java :

===================================================================
代码:

/**
 * Created by IntelliJ IDEA.
 * User: wangzy
 * Date: 2004-12-5
 * @spring.bean
 *      id="Bean2"
 *      singleton="true"
 * cMBean1
 */
public class Bean2 {
}

===================================================================

下来当然是最重要的ant的build.xml了,其中相关部分为:
代码:

<!--q里是xdoclet的lib,q些都不是ant的core包,所以要引进?-->
<path id="xdoclet.class.path">
    <fileset dir="c:\dev\ant\lib\xdoclet">
        <include name="*.jar"/>
    </fileset>
</path>

<!--q里是生成spring-beans配置?-->
<target name="srpingdoclet">
    <!--定义springdoclet task -->   
    <taskdef
        name="springdoclet"
        classname="xdoclet.modules.spring.SpringDocletTask"
        classpathref="xdoclet.class.path"
    />
    <!--q里Ҏsrc下的java文g中的信息Q生成spring-beans.xml到“spring/spring-beans.xml”文件中-->
    <springdoclet destdir="spring">
        <fileset dir="src" includes="**/*.java" />
        <springxml destinationFile="spring-beans.xml" />
    </springdoclet>
</target>



q行ant springdocletQ看看spring/spring-beans.xml文gQ大功告成!Q!
具体详细信息可以看xdoclet文档

代码:


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC
    "-//SPRING//DTD BEAN//EN"
    "http://www.springframework.org/dtd/spring-beans.dtd">

<beans
  default-autowire="no"
  default-lazy-init="false"
  default-dependency-check="none"
>

  <bean
      id="Bean1"
      class="Bean1"
      singleton="true"
  >

  </bean>

  <bean
      id="XdocletMain"
      class="XdocletMain"
      singleton="true"
  >

    <property name="bean1">
      <ref bean="Bean1"/>
    </property>
    <property name="bean2">
      <ref bean="Bean2"/>
    </property>
  </bean>

  <bean
      id="Bean2"
      class="Bean2"
      singleton="true"
  >

  </bean>

  <!--
     To include additional bean definitions for Spring in the generated
     application context file, add a file to your XDoclet merge directory
     called spring-beans.xml that contains the <bean></bean> markup.
  -->

</beans>


konhon 优华 2006-12-06 10:05 发表评论
]]>
Spring Framework标记库初学指?http://www.aygfsteel.com/konhon/archive/2006/05/29/48674.htmlkonhon 优华konhon 优华Mon, 29 May 2006 01:11:00 GMThttp://www.aygfsteel.com/konhon/archive/2006/05/29/48674.htmlhttp://www.aygfsteel.com/konhon/comments/48674.htmlhttp://www.aygfsteel.com/konhon/archive/2006/05/29/48674.html#Feedback0http://www.aygfsteel.com/konhon/comments/commentRss/48674.htmlhttp://www.aygfsteel.com/konhon/services/trackbacks/48674.html
  相对于EJB来说QSpring是一个轻量的J2EE应用开发框架。这里提到的轻量U指的是Spring框架本nQ而不是说Spring只能适用于轻量的应用开发。Spring的轻盈体现在其框架本w的基础l构以及对其他应用工L支持和装配能力,与EJBq种庞然大物相比QSpring使我们把各个技术层ơ之间的风险降低。EJB的内聚性较强,比如数据持久层管理、事务管理、生命周期管理都全部交给了EJB容器中管理,内聚性的白盒特征使我们必L弃一部分可控性而去信Q容器能力。而Spring则是考虑如何“不造轮子”,如何更好的组装这些轮子,让他们更好的转动。比如数据持久层理可以使用hibernateQ日志管理可以用jakartacommonlogging。一个比较恰当的比喻是“我们要钉几个钉子,Z完成q个目的Q锤子生产商生了大大小一pd的锤子,每个锤子都有一套复杂的使用ҎQ用来钉某种特别的钉子,l果令我们头g堪。解决锤子过多的问题Q通过springQ我们可以用几U锤子,但用h象是只有一个锤子”?注:q段话是在网上看见的Q这里引用这个比喻,我个得很生动)关于q个框架也有一些简单的ȝQ“Spring有几个主要的部分QBean+ApplicationContextQ以一U统一的、IoC的方式查找、管理、组装、用系l的lgQ取代一切工厂;持久化框Ӟweb框架。“J2EE框架”是RodJohnson的愿景,他希望Spring为J2EE轻量U解x案提供自底至的全面基础设施支持。?
  上面是关于一个新的Framework的简单介l,据说是未来J2EE发展的方向。以前在论坛上有关于J2EE最佳组合的讨论Q听说这个JSTL+Struts(或webwork)+Spring+Hibernate的组合很被看?如果你感兴趣的话Q可以到SpringFramework中文论坛上看看。下面{入本文的正题?

  Spring 标记库介l及用法Q?

  本文重点介lSpring 提供的标记库及其用法Q?

  当你在项目中用Spring Framework的时候,表现层可以选择Spring Framework自带的标记库。当Ӟq不是你唯一的选择。你可以选择其它标记库或模板替换技术。Spring Framework q没有ؓ应用提供非常丰富的标记库。Spring Framework 提供的标记库仅仅是ؓ了够用就行,它ƈ不是无所不包的。呵呵,q点与Struts丰富的标记库不一栗其实这点符合RodJohnson的出发点Q既“不造轮子”。当ӞSpring Framework标记库有它自w的特点Q可以说是个有益的补充吧?

  Spring 标记库分cd下:

  1、spring:hasBindErrors

  2、spring:bind

  3、spring:transform

  4、spring:message

  5、spring:htmlEscape

  6、spring:theme

  下面我们来具体介l一下用法:

  1、spring:hasBindErrors

  对应org.springframework.web.servlet.tags.BindErrorsTag标记库处理类?

  q个标记提供用于l定对象的errorsQ如果这个标记被用到的话Q那么关于这个对象的错误在面上显C出来。用这个标记的前提条g是要先用<spring:bindQ标?q且Qspring:hasBindErrorsQ这个标C能用来表C对象的状态,它仅仅可以绑定对象本w和对象的属性?具体用法如下Q?

Qspring:hasBindErrors name="priceIncrease"Q?QbQPlease fix all errors!Q?bQ?Q?spring:hasBindErrorsQ?

  通过q个单的例子Q我来具体说一下这个标记的属性吧?

  nameQ是要被查的Bean的名字。这个属性是必需要的?

  q里是简单用法,所以就不介l它包含的errors变量了。具体看p文档。下同?

  2、spring:bind

  对应org.springframework.web.servlet.tags.BindTag标记库处理类

  q个标记用来为某个bean或bean 的属性赋|通常和form一LQ相当于action的作用。它指明表单要提交到那个cLcȝ属性中厅R?

  其中path属性是必须的,指明转到的类的\径。D例如下:

Qform method="post"Q?
Qtable width="95%" bgcolor="f8f8ff" border="0" cellspacing="0" cellpadding="5"Q?
QtrQ?
Qtd alignment="right" width="20%"QIncrease (%):Q?tdQ?
Qspring:bind path="priceIncrease.percentage"Q?
Qtd width="20%"Q?
Qinput type="text" name="percentage" value="Qc:out value="${status.value}"/Q?Q?
Q?tdQ?
Qtd width="60%"Q?
Qfont color="red"Q<c:out value="${status.errorMessage}"/Q</fontQ?
Q?tdQ?
Q?spring:bindQ?
Q?trQ?
Q?tableQ?
QbrQ?
……………………省?
Q?formQ?

 3、spring:transform

  对应org.springframework.web.servlet.tags.TransformTag标记库处理类,q个标记用来转换表单中不与bean中的属性一一对应的那些属性,通常和<spring:bindQ一起用。<spring:transformQ标CؓQspring:bindQ用提供了更好的支持?

  属性如下:

  valueQ必需要的。和当前Qspring:bindQ标记指向的beancȝ同。就是你要{换的实体cd?

  varQ不是必需的。这个字W串被用来绑定输出结果到pageQrequest, session或application scope.默认情况输出到jsp中?

  scopeQ不是必需的。前提条件var必须讄的情况下。它的值可以是pageQrequest, session或application?

  4、spring:message 对应org.springframework.web.servlet.tags.MessageTag标记库处理类

  q个标记用来帮助springframework支持国际化。和JSTL的fmt:message标记cM。当然这个标记可以很好的工作的本地的springframework框架下?

  属性如下:

  codeQ不是必需的。用来查找message,如果没有被用的话,text被使用?

  textQ不是必需的。假如code不存在的话,默认是text输出。当code和text都没有设|的话,标记输Zؓnull.

  varQ不是必需的。这个字W串被用来绑定输出结果到pageQrequest, session或application scope.默认情况输出到jsp中?

  scopeQ不是必需的。前提条件var必须讄的情况下。它的值可以是pageQrequest, session或application?

  5、spring:htmlEscape

  对应org.springframework.web.servlet.tags.HtmlEscapeTag标记库处理类

  不常用,q里省略

  6、spring:theme

  对应org.springframework.web.servlet.tags.ThemeTag标记库处理类

  不常用,q里省略

  学习完这些用法后Q让我们来看个具体的例子吧?

  配置步骤如下Q?

  目录l构图:

-spirngapp
-WEB-INF
-classes
-lib
-src
-war

  1、将spring.tld拯到WEB-INF目录?

  2、将spring.jar拯到WEB-INF\lib包下

  举例如下Q?

  在web.xml中配|好taglib属性,代码如下Q?

Q?xml version="1.0" encoding="UTF-8"?Q?br />Q?DOCTYPE web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN' 'http://java.sun.com/dtd/web-app_2_3.dtd'Q?br />Qweb-appQ?br />QservletQ?br />Qservlet-nameQspringappQ?servlet-nameQ?br />Qservlet-classQorg.springframework.web.servlet.DispatcherServletQ?servlet-classQ?br />Qload-on-startupQ?Q?load-on-startupQ?br />Q?servletQ?br />Qservlet-mappingQ?br />Qservlet-nameQspringappQ?servlet-nameQ?br />Qurl-patternQ?.htmQ?url-patternQ?br />Q?servlet-mappingQ?br />Qwelcome-file-listQ?br />Qwelcome-fileQ index.jsp Q?welcome-fileQ?br />Q?welcome-file-listQ?br />QtaglibQ?br />Qtaglib-uriQ?springQ?taglib-uriQ?br />Qtaglib-locationQ?WEB-INF/spring.tldQ?taglib-locationQ?br />Q?taglibQ?br />Q?web-appQ?br />

  jsp面代码如下Q?

Q?@ include file="/WEB-INF/jsp/include.jsp" %Q?br />Q?@ taglib prefix="spring" uri="/spring" %Q?br />QhtmlQ?br />QheadQ?br />QtitleQ<fmt:message key="title"/Q</titleQ?br />Q?headQ?br />QbodyQ?br />Qh1Q?br />Qfmt:message key="priceincrease.heading"/Q?br />Q?h1Q?br />Qform method="post"Q?br />Qtable width="95%" bgcolor="f8f8ff" border="0" cellspacing="0" cellpadding="5"Q?br />QtrQ?br />Qtd alignment="right" width="20%"QIncrease (%):Q?tdQ?br />Qspring:bind path="priceIncrease.percentage"Q?br />Qtd width="20%"Q?br />Qinput type="text" name="percentage" value="Qc:out value="${status.value}"/Q?Q?br />Q?tdQ?br />Qtd width="60%"Q?br />Qfont color="red"Q?br />Qc:out value="${status.errorMessage}"/Q?br />Q?fontQ?br />Q?tdQ?br />Q?spring:bindQ?br />Q?trQ?br />Q?tableQ?br />QbrQ?br />Qspring:hasBindErrors name="priceIncrease"Q?br />QbQPlease fix all errors!Q?bQ?br />Q?spring:hasBindErrorsQ <brQ<brQ?br />Qinput type="submit" alignment="center" value="Execute"Q?br />Q?formQ?br />Qa href="Qc:url value="hello.htm"/Q?QHomeQ?aQ?br />Q?bodyQ?br />Q?htmlQ?br />

  Qspring:bindQ标记经常用来绑定<inputQ表单元素以便提交给PriceIncrease.java,其实PriceIncrease.java中就是包含一些getter和setter的方法的cR当用户按下按钮提交的时候,其表单中的值实际上pframework攑ֈ了PriceIncrease.java中。<spring:bindQ经常和form一起?q个${status.errorMessage}?{status.value}是一个framework定义的特D变量,它们被用来显C错误信息和当前表单中的数据。呵呵,今天到此ؓ止吧Q关于Spring Framework标记库的详细用法Q请参考其文档?img src ="http://www.aygfsteel.com/konhon/aggbug/48674.html" width = "1" height = "1" />

konhon 优华 2006-05-29 09:11 发表评论
]]>
MultiActionController別 http://www.aygfsteel.com/konhon/archive/2006/05/26/48259.htmlkonhon 优华konhon 优华Fri, 26 May 2006 01:07:00 GMThttp://www.aygfsteel.com/konhon/archive/2006/05/26/48259.htmlhttp://www.aygfsteel.com/konhon/comments/48259.htmlhttp://www.aygfsteel.com/konhon/archive/2006/05/26/48259.html#Feedback0http://www.aygfsteel.com/konhon/comments/commentRss/48259.htmlhttp://www.aygfsteel.com/konhon/services/trackbacks/48259.html 要將盔R的方法組J在一個檔案中Q只使用一個handleRequest()Ҏg是不夠的Q我們希望同一個Controller中可以根據我們的指定來Action中的某個方法,而不只是使用handleRequest()Ҏ?

 作為org.springframework.web.servlet.mvc.AbstractController下的另一個子別Qorg.springframework.web.servlet.mvc.multiaction.MultiActionControllerQ它可以讓我們在一個Controller別中定多個方法,並根據我們的請求來呼叫當中的某個方法來埯?

 如果您瞭解StrutsQ其DispatchAction類似於Spring的MultiActionController別Q所不同的是QMultiActionController擁有比Struts的DispatchAction更多樣化的方式來參數化與i織這些Action?

 要用MultiActionControllerQ您要配合一個MethodNameResolver的實例,MultiActionController預設是InternalPathMethodNameResolverQ這是最單的方式,Ҏ您所i的E址最後的檔案名稱來判斯埯Action中的哪一個方法,但通常我們不會用InternalPathMethodNameResolverQ因為這就失去了用MultiActionController的一些優點,像是依請求參怾決定要呼叫的Ҏ?

 我們通常會用ParameterMethodNameResolver或PropertiesMethodNameResolverQ在一個網址上結合請求參數,以參怾決定要執行哪一個ActionQ這邊以ParameterMethodNameResolverZQ首先,我們可以在bean定義檔中這麼撰寫Q?

<?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="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
        <property name="mappings"> 
            <props> 
                <prop key="/book.do">bookAction</prop> 
            </props> 
        </property> 
    </bean> 
    
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
        <property name="viewClass"> 
            <value>org.springframework.web.servlet.view.InternalResourceView</value> 
        </property> 
        <property name="prefix"> 
            <value>/WEB-INF/jsp/</value> 
        </property> 
        <property name="suffix"> 
            <value>.jsp</value> 
        </property> 
    </bean> 

    <bean id="paraMethodResolver" 
        class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver"> 
        <property name="paramName"><value>method</value></property> 
        <property name="defaultMethodName"><value>list</value></property> 
    </bean> 
        
    <bean id="bookAction" class="onlyfun.caterpillar.GuestBookAction"> 
        <property name="methodNameResolver"> 
            <ref bean="paraMethodResolver"/> 
        </property> 
        <property name="testPage"> 
            <value>test</value> 
        </property> 
    </bean> 
</beans>

 在paraMethodResolver中,我們用paramName定義在http請求中用method參數來指定要呼叫的方法,若是請求中沒有指定method參數Q則會用defaultMethodName所指定的方法,這邊指定的是list()Ҏ?

 GuestBookAction是個繼承MultiActionController的類別,當中我們可以定我們在method參數指定下所要呼叫的ҎQ例如:

GuestBookAction.java
package onlyfun.caterpillar; 

import javax.servlet.http.*; 
import org.springframework.web.servlet.ModelAndView; 
import org.springframework.web.servlet.mvc.multiaction.MultiActionController; 

public class GuestBookAction extends MultiActionController { 
    privateString testPage; 
    
    public ModelAndView list(HttpServletRequest req, HttpServletResponse res) { 
        returnnew ModelAndView(this.getTestPage(),"executed", "list"); 
    } 
    
    public ModelAndView add(HttpServletRequest req, HttpServletResponse res) { 
        returnnew ModelAndView(this.getTestPage(),"executed", "add"); 
    } 
    
    public ModelAndView delete(HttpServletRequest req, HttpServletResponse res) { 
        returnnew ModelAndView(this.getTestPage(),"executed", "delete"); 
    } 
    
    publicString getTestPage() { 
        return testPage; 
    } 
    
    public void setTestPage(String testPage) { 
        this.testPage = testPage; 
    } 
}

 注意到我們的Ҏ必須包括HttpServletRequest與HttpServletResponse作為參數Q您也可以用帶有第三個參數HttpSession的版本?

 上面的類別只是一個簡單的例Q用於測試MultiActionController的運作,我們測試用的JSPE頁如下Q?

<html> 
<head><title>Test</title></head> 
<body> 
    <H1> "${executed}" method is executed.</H2> 
</body> 
</html>

 當您使用以下的網址請求資源時:
http://localhost:8080/springapp/book.do?method=add

 我們的測試E頁傳回以下的內容Q?

<html> 
<head><title>Test</title></head> 
<body> 
    <H1> "add" method is executed.</H2> 
</body> 
</html>

 您也可以所有相應的方法專門i織在一個委a(delegateQ物件中Q而不是撰寫在Controller別中,當請求來到時Q將委託i這個物件來埯指定的方法,您只要定MultiActionController的delegate屬性即可,例如我們的委託物g如下Q?

BookActionDelegate.java
package onlyfun.caterpillar; 

import javax.servlet.http.*; 
import org.springframework.web.servlet.ModelAndView; 

public class BookActionDelegate { 
    privateString testPage; 
    
    public ModelAndView list(HttpServletRequest req, HttpServletResponse res) { 
        returnnew ModelAndView(this.getTestPage(),"executed", "list"); 
    } 
    
    public ModelAndView add(HttpServletRequest req, HttpServletResponse res) { 
        returnnew ModelAndView(this.getTestPage(),"executed", "add"); 
    } 
    
    public ModelAndView delete(HttpServletRequest req, HttpServletResponse res) { 
        returnnew ModelAndView(this.getTestPage(),"executed", "delete"); 
    } 
    
    publicString getTestPage() { 
        return testPage; 
    } 
    
    public void setTestPage(String testPage) { 
        this.testPage = testPage; 
    } 
}

 珑֜我們不用定GuestBookAction了,直接使用MultiActionControllerQ只要定Bean定義檔就好了Q?

<?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="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
        <property name="mappings"> 
            <props> 
                <prop key="/book.do">bookAction</prop> 
            </props> 
        </property> 
    </bean> 
    
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
        <property name="viewClass"> 
            <value>org.springframework.web.servlet.view.InternalResourceView</value> 
        </property> 
        <property name="prefix"> 
            <value>/WEB-INF/jsp/</value> 
        </property> 
        <property name="suffix"> 
            <value>.jsp</value> 
        </property> 
    </bean> 

    <bean id="paraMethodResolver" 
        class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver"> 
        <property name="paramName"><value>method</value></property> 
        <property name="defaultMethodName"><value>list</value></property> 
    </bean> 

    <bean id="bookActionDelegate" class="onlyfun.caterpillar.BookActionDelegate"> 
        <property name="testPage"> 
            <value>test</value> 
        </property> 
    </bean> 
    
    <bean id="bookAction" class="org.springframework.web.servlet.mvc.multiaction.MultiActionController"> 
        <property name="methodNameResolver"> 
            <ref bean="paraMethodResolver"/> 
        </property> 
        <property name="delegate"> 
            <ref bean="bookActionDelegate"/> 
        </property> 
    </bean>    
</beans>

 測試的結果與上面是相同的?

 以上說明的是ParameterMethodNameResolverQ而PropertiesMethodNameResolver的設定方法是似的,有興的話,可以看一下Spring參考手冊中有關MultiActionController的說明,當中也有個簡明的a定例?



konhon 优华 2006-05-26 09:07 发表评论
]]>
Spring ~程入门十大问题解答 http://www.aygfsteel.com/konhon/archive/2005/08/13/10016.htmlkonhon 优华konhon 优华Sat, 13 Aug 2005 00:24:00 GMThttp://www.aygfsteel.com/konhon/archive/2005/08/13/10016.htmlhttp://www.aygfsteel.com/konhon/comments/10016.htmlhttp://www.aygfsteel.com/konhon/archive/2005/08/13/10016.html#Feedback0http://www.aygfsteel.com/konhon/comments/commentRss/10016.htmlhttp://www.aygfsteel.com/konhon/services/trackbacks/10016.html

  1、如何学习SpringQ?BR>
  你可以通过下列途径学习springQ?BR>
  (1) spring下蝲包中doc目录下的MVC-step-by-step和sample目录下的例子都是比较好的spring开发的例子?

  (2) AppFuse集成了目前最行的几个开源轻量框架或者工?Ant,XDoclet,Spring,Hibernate(iBATIS),JUnit,Cactus,StrutsTestCase,Canoo&#39;s WebTest,Struts Menu,Display Tag Library,OSCache,JSTL,Struts ?BR>
  你可以通过AppFuse源代码来学习spring?BR>
AppFuse|站Qhttp://raibledesigns.com/wiki/Wiki.jsp?page=AppFuse

  (3)Spring 开发指?夏昕)Qhttp://www.xiaxin.net/Spring_Dev_Guide.rarQ?BR>
  一本spring的入门书c?里面介绍了反转控制和依赖注射的概念,以及spring的bean理Qspring的MVCQspring和hibernteQiBatis的结合?BR>
  (4) spring学习的中文论?BR>
  SpringFramework中文论坛(http://spring.jactiongroup.net)

  Java视线论坛(http://forum.javaeye.com)的spring栏目

  2、利用Spring框架~程Qconsole打印出log4j:WARN Please initialize the log4j system properlyQ?BR>
  说明你的log4j.properties没有配置。请把log4j.properties攑ֈ工程的classpath中,eclipse的classpath为bin目录Q由于编译后src目录下的文g会拷贝到bin目录下,所以你可以把log4j.properties攑ֈsrc目录下?BR>
  q里l出一个log4j.properties的例子:

log4j.rootLogger=DEBUG,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %5p (%F:%L) - %m%n

  3、出?java.lang.NoClassDefFoundError?

  一般情况下是由于你没有把必要的jar包放到lib中?BR>
  比如你要采用spring和hibernateQ带事务支持的话Q,你除了spring.jar外还需要hibernat.jar、aopalliance.jar、cglig.jar、jakarta-commons下的几个jar包?BR>
http://www.springframework.org/download.html下蝲spring开发包Q提供两Uzip?BR>spring-framework-1.1.3-with-dependencies.zip和spring-framework-1.1.3.zipQ我你下载spring-framework-1.1.3-with-dependencies.zip。这个zip解压~后比后者多一个lib目录Q其中有hibernate、j2ee、dom4j、aopalliance、jakarta-commons{常用包?BR>
  4、java.io.FileNotFoundException: Could not open class path resource [....hbm.xml],提示找不到xml文gQ?BR>
  原因一般有两个Q?BR>
  (1)该xml文g没有在classpath中?

  (2)applicationContext-hibernate.xml中的xml名字没有带包名。比如:

Qbean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"Q?BR>Qproperty name="dataSource"Q<ref bean="dataSource"/Q</propertyQ?BR>Qproperty name="mappingResources"Q?BR> QlistQ?BR>  QvalueQUser.hbm.xmlQ?valueQ?BR>  错,改ؓQ?
  QvalueQcom/yz/spring/domain/User.hbm.xmlQ?valueQ?BR> Q?listQ?BR>Q?propertyQ?BR>Qproperty name="hibernateProperties"Q?BR>QpropsQ?
 Qprop key="hibernate.dialect"Q?net.sf.hibernate.dialect.MySQLDialect Q?propQ?
 Qprop key="hibernate.show_sql"QtrueQ?propQ?
Q?propsQ?
Q?propertyQ?BR>Q?beanQ?

  5、org.springframework.beans.NotWritablePropertyException: Invalid property &#39;postDao&#39; of bean classQ?BR>
  出现异常的原因是在application-xxx.xml中property name的错误?BR>
  Qproperty name="...."Q?中name的名字是与bean的setҎ相关的,而且要注意大写?BR>
  比如

public class PostManageImpl extends BaseManage implements PostManage {
 private PostDAO dao = null;
 public void setPostDAO(PostDAO postDAO){
  this.dao = postDAO;
 }
}

  那么xml的定义应该是Q?BR>
Qbean id="postManage" parent="txProxyTemplate"Q?BR>Qproperty name="target"Q?BR> Qbean class="com.yz.spring.service.implement.PostManageImpl"Q?BR>  Qproperty name="postDAO"Q<ref bean="postDAO"/Q</propertyQ??BR>  Qproperty name="dao"Q<ref bean="postDAO"/Q</propertyQ??BR> Q?beanQ?BR>Q?propertyQ?BR>Q?beanQ?

  6、Spring中如何实C务管理?

  首先Q如果用mysqlQ确定mysql为InnoDBcd?BR>
  事务理的控制应该放到商业逻辑层。你可以写个处理商业逻辑的JavaBeanQ在该JavaBean中调用DAOQ然后把该Bean的方法纳入spring的事务管理?BR>
  比如Qxml文g定义如下Q?BR>
Qbean id="txProxyTemplate" abstract="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"Q?BR>Qproperty name="transactionManager"Q<ref bean="transactionManager"/Q</propertyQ?BR>Qproperty name="transactionAttributes"Q?BR>QpropsQ?BR>Qprop key="save*"QPROPAGATION_REQUIREDQ?propQ?BR>Qprop key="remove*"QPROPAGATION_REQUIREDQ?propQ?BR>Qprop key="*"QPROPAGATION_REQUIREDQ?propQ?BR>Q?propsQ?BR>Q?propertyQ?BR>Q?beanQ?BR>
Qbean id="userManage" parent="txProxyTemplate"Q?BR> Qproperty name="target"Q?BR>  Qbean class="com.yz.spring.service.implement.UserManageImpl"Q?BR>   Qproperty name="userDAO"Q<ref bean="userDAO"/Q</propertyQ?BR>  Q?beanQ?BR> Q?propertyQ?BR>Q?beanQ?

  com.yz.spring.service.implement.UserManageImpl是我们的实现商业逻辑的JavaBean。我们通过parent元素声明其事务支持?BR>
  7、如何管理Spring框架下更多的JavaBeanQ?BR>
  JavaBean多Qspring配置文gp大,q样不易l护。ؓ了配置清晰Q我们可以将JavaBean分类理Q放在不同的配置文g中?应用启动时将所有的xml同时加蝲?BR>
  比如Q?BR>
  DAO层的JavaBean攑ֈapplicationContext-hibernate.xml中,商业逻辑层的JavaBean攑ֈapplicationContext-service.xml中。然后启动类中调用以下代码蝲入所有的ApplicationContext?BR>
String[] paths = {"com/yz/spring/dao/hibernate/applicationContext-hibernate.xml",
"com/yz/spring/service/applicationContext-service.xml"};
ctx = new ClassPathXmlApplicationContext(paths);

  8、web应用中如何加载ApplicationContextQ?BR>
  可以通过定义web.xmlQ由web容器自动加蝲?BR>
QservletQ?BR>Qservlet-nameQcontextQ?servlet-nameQ?BR>Qservlet-classQorg.springframework.web.context.ContextLoaderServletQ?servlet-classQ?BR>Qload-on-startupQ?Q?load-on-startupQ?BR>Q?servletQ?BR>
Qcontext-paramQ?BR>Qparam-nameQcontextConfigLocationQ?param-nameQ?BR>Qparam-valueQ?WEB-INF/applicationContext-hibernate.xmlQ?param-valueQ?BR>Qparam-valueQ?WEB-INF/applicationContext-service.xmlQ?param-valueQ?BR>Q?context-paramQ?

  9、在spring中如何配|的log4j?

  在web.xml中加入以下代码即可?BR>
Qcontext-paramQ?BR>Qparam-nameQlog4jConfigLocationQ?param-nameQ?BR>Qparam-valueQ?WEB-INF/log4j.propertiesQ?param-valueQ?BR>Q?context-paramQ?

  10、Spring框架入门的编E问题解决了Q我该如何更深地领会Spring框架呢?

  q两本书你该ȝ看。这两本书是由Spring的作者Rod Johnson~写的?BR>
Expert One on one J2EE Design and Development
Expert One on one J2EE Development Without EJB

  你也该看看martinfowler的Inversion of Control Containers and the Dependency Injection pattern?BR>
http://www.martinfowler.com/articles/injection.html
 
  再好好研M下spring的文档?BR>
http://www.jactiongroup.net/reference/html/index.htmlQ中文版Q未全部译Q?

  q有是多实践吧?


konhon 优华 2005-08-13 08:24 发表评论
]]>
վ֩ģ壺 ͼ| Դ| ľ| | | | | | Զ| ɽ| ̨| ɽ| ˮ| Ϫ| | ɽ| | ҳ| ͨ| Ϲ| | ¡| ͭɽ| ϲ| | ζ| | | | ʹ| | Ϲ| | | ٷ| Ͻ| | | ԭ| ̶| ʶ|