<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    千里冰封
    JAVA 濃香四溢
    posts - 151,comments - 2801,trackbacks - 0
    Seam是一個挺不錯的框架,但是用netbeans來開發它,卻有點難度,因為目前netbeans沒有seam插件,不像Eclipse有jboss提供的官方插件,但是插件是死的,人是活的,它要能跑起起來,一定有它的配置,下面我們就用netbeans做為IDE來開發一個seam的應用.

    當然,我們還有另外一個方法,那就是利用seam自帶的seam-gen工具,生成一個工程的框架,然后可以用netbeans打開,但是有一些不太好的地方,那就是所有的工程內容都混到一起去了,WEB的工程和EJB的工程都在同一個工程下面,并且由于是基于ant的,所以工程的目錄看得可能不太習慣.但它也有一個好處,那就是它會為你生成各種必須的配置文件,而不需要手工的編寫,但是它的壞處就是,如果你后面想要添加EJB或者添加網頁內容,就不太方便了,因為目錄的組織是怪怪的,不是標準的Netbeans工程組織方式,所以我還是覺得自己建標準的netbeans工程,然后手工添加這些配置文件,并且這些配置文件也不一定需要自己全部手工編寫,完全可以復制過來,然后在一些細節的地方改動一下就可以了.并且配置好以后,要添加工程內容,就可以完全按照netbeans標準工程的方式來添加了.

    由于自己也是前幾天接觸的seam,所以錯誤之處難免,還望大家指出.

    首先我們說一說周邊的東西,那就是要添加哪些配置文件,配置文件大概是什么內容,以及各個工程都需要哪些庫,這些是基礎,也是很重要的,否則布署工程的時候就會出現一大堆的錯誤.
    在正式工作之前,先準備好要用到的工具,我這里的工具列表如下:
    1,Netbeans6.1,可以到http://www.netbeans.org下載,下載的時候,選擇下載全部的版本,也就是最大的那個版本.
    2,Jboss-4.2.2.GA,可以到http://www.jboss.org下載.
    3,Jboss-seam-2.0.1.GA,也可以到http://www.jboss.org下載

    以上具體地址我就不給了,可以自己到首頁上去找,這個應該不難吧.
    至于richfaces就不用準備了,seam里面都帶了,什么spring,hibernate等等,它里面都有自帶.

    本文的流程如下,先是大概介紹每個工程的配置文件有哪些,以及它們需要哪些庫文件,然后才真正寫一個示例程序,所以前面的配置文件內容僅供參考,讓我們知道,里面包括了哪些元素,因為實際的工程和它不一定是一樣的.

    準備工作做好以后,就可以開始了,打開我們熟悉的Netbeans,選擇新建工程,然后選擇新建Web工程,在建WEB工程的時候, 不要選擇使用任何框架,因為現在還沒有seam的netbeans插件,所以,一切的配置都得靠手寫.建好了WEB工程以后,在WEB-INF文件夾下面添加如下文:pages.xml,components.xml,faces-config.xml,而web.xml是我們本來就有的,但是我們要修改一下里面的內容,好讓它可以配合seam框架運行.更改好的web.xml內容大致如下:
    如果你的WEB容器支持JAVAEE5,則下面的web-app version就可以等于2.5了,如果是支持J2EE1.4的,那么就要把它改成2.4的版本,建議是利用netbeans生成的web.xml基礎上改,也就是只改內容,而不改xml的頭部說明,也就是下面的web-app部份,一般不要去改,我們只改動里面的元素而已.
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5"
        xmlns
    ="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation
    ="http://java.sun.com/xml/ns/javaee 

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    >
        
        
    <display-name>Test</display-name>
        
        
    <!-- Seam -->
         
        
    <listener>
            
    <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
        
    </listener>
        
        
    <servlet>
            
    <servlet-name>Seam Resource Servlet</servlet-name>
            
    <servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>
        
    </servlet>
        
        
    <servlet-mapping>
            
    <servlet-name>Seam Resource Servlet</servlet-name>
            
    <url-pattern>/seam/resource/*</url-pattern>
        
    </servlet-mapping>
        
        
    <filter>
            
    <filter-name>Seam Filter</filter-name>
            
    <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
        
    </filter>

        
    <filter-mapping>
            
    <filter-name>Seam Filter</filter-name>
            
    <url-pattern>/*</url-pattern>
        
    </filter-mapping>
        
        
    <!-- 這里用了facelets的技術,我們的例子里面沒有用到 -->
        
        
    <context-param>
            
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
            
    <param-value>.xhtml</param-value>
        
    </context-param>

        
    <context-param>
            
    <param-name>
                javax.faces.STATE_SAVING_METHOD
            
    </param-name>
            
    <param-value>server</param-value>
        
    </context-param>

        
    <context-param>
            
    <param-name>facelets.DEVELOPMENT</param-name>
            
    <param-value>true</param-value>
        
    </context-param>
        
        
    <servlet>
            
    <servlet-name>Faces Servlet</servlet-name>
            
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
            
    <load-on-startup>1</load-on-startup>
        
    </servlet>
        
        
    <servlet-mapping>
            
    <servlet-name>Faces Servlet</servlet-name>
            
    <url-pattern>*.seam</url-pattern>
        
    </servlet-mapping>

        
    <session-config>
            
    <session-timeout>10</session-timeout> 
        
    </session-config>    
        
    </web-app>

    在添加其它三個文件的內容之前,先說一下那三個文件是干什么用的,首先components.xml,這個文件里面寫的是seam組件的配置,它是必不可少的,一般來說,它可以放在很多地方,但是最好還是放在WEB-INF下面,下面來看看它里面的內容:

    <?xml version="1.0" encoding="UTF-8"?>
    <components xmlns="http://jboss.com/products/seam/components"
                xmlns:core
    ="http://jboss.com/products/seam/core"
                xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation
    =
                  "http://jboss.com/products/seam/core
                   http://jboss.com/products/seam/core-2.0.xsd
                   http://jboss.com/products/seam/components
                   http://jboss.com/products/seam/components-2.0.xsd"
    >
        
    <core:init jndi-pattern="Seam6/#{ejbName}/local" debug="true"/>
        
    <core:manager conversation-timeout="120000"/>
    </components>

    上面的配置幾乎是最簡單的配置,它給出了查找EJB的時候,JNDI的形式,以及對話(conversation)的超時時間.
    然后我們再來看faces-config.xml,它是標準的JSF的說明文件,但是它在SEAM里面并沒有完全起到在JSF里面的作用,在JSF里面,它定義backingbean,并且定義導航規則,但是在SEAM里面,它總是很小,backingbean不需要在這里定義了,因為在SEAM里面,我們可以把EJB做為backingbean,并且用注釋的方式來指定它的名字以及范圍,另外一個,導航規則也不用在這里定義了,我們可以用另外一個專門的文件來定義,那就是pages.xml,所以在SEAM的應用里面,雖然用到了JSF的技術,但是JSF的主要配置文件faces-config.xml卻不用怎么配置了,當然,你也可以在這里面配置導航規則,只有當我們使用了facelets技術以后,才確定要在這個文件里面配置一些東西,否則,這個文件空在那里也沒什么關系,facelets是SEAM框架里面推薦使用的技術,當然,我們也可以不用,也可以只用JSF,如果我們使用facelets的話,就需要要faces-config.xml里面添加如下的聲明以支持facelets:
    <?xml version='1.0' encoding='UTF-8'?>
    <faces-config version="1.2"
                  xmlns
    ="http://java.sun.com/xml/ns/javaee"
                  xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation
    ="http://java.sun.com/xml/ns/javaee 

    http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
    >
        
        
    <application>
            
    <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
        
    </application>

    </faces-config>

    最后我們再來看pages.xml,它是定義頁面之間的導航規則的,這個文件是可有可無的,SEAM啟動的時候,會找這個文件,找到了就讀里面的配置,找不到也沒關系,就當什么也沒有發生.
    它的大概內容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <pages xmlns="http://jboss.com/products/seam/pages"
           xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation
    ="http://jboss.com/products/seam/pages 

    http://jboss.com/products/seam/pages-2.0.xsd"


           no-conversation-view-id
    ="/main.xhtml"
                     login-view-id
    ="/home.xhtml">

        
    <page view-id="/register.xhtml">
        
            
    <action if="#{validation.failed}"
               execute
    ="#{register.invalid}"/>
        
            
    <navigation>
                
    <rule if="#{register.registered}">
                    
    <redirect view-id="/home.xhtml"/>
                
    </rule>
            
    </navigation>
            
        
    </page>

        
    <page view-id="/home.xhtml">
        
            
    <navigation>
                
    <rule if="#{identity.loggedIn}">
                    
    <redirect view-id="/main.xhtml"/>
                
    </rule>
            
    </navigation>
            
        
    </page>
        
        
    <page view-id="/password.xhtml"
              login-required
    ="true">
        
            
    <navigation>
                
    <rule if="#{changePassword.changed}">
                    
    <redirect view-id="/main.xhtml"/>
                
    </rule>
            
    </navigation>
            
        
    </page>

        
    <page view-id="/main.xhtml" 
              login-required
    ="true">
        
            
    <navigation from-action="#{hotelBooking.selectHotel(hot)}">
                
    <redirect view-id="/hotel.xhtml"/>
            
    </navigation>
            
            
    <navigation from-action="#{bookingList.cancel}">
                
    <redirect/>
            
    </navigation>
            
        
    </page>
        
        
    <page view-id="/hotel.xhtml" 
              conversation-required
    ="true" 
              login-required
    ="true">
              
            
    <description>View hotel: #{hotel.name}</description>
            
            
    <navigation from-action="#{hotelBooking.bookHotel}">
                
    <redirect view-id="/book.xhtml"/>
            
    </navigation>
            
        
    </page>

        
    <page view-id="/book.xhtml" 
              conversation-required
    ="true" 
              login-required
    ="true">
              
            
    <description>Book hotel: #{hotel.name}</description>
            
            
    <navigation from-action="#{hotelBooking.setBookingDetails}">
                
    <rule if="#{hotelBooking.bookingValid}">
                    
    <redirect view-id="/confirm.xhtml"/>
                
    </rule>
            
    </navigation>
            
        
    </page>

        
    <page view-id="/confirm.xhtml" 
              conversation-required
    ="true" 
              login-required
    ="true">
              
            
    <description>Confirm booking: #{booking.description}</description>
            
            
    <navigation from-action="#{hotelBooking.confirm}">
                
    <redirect view-id="/main.xhtml"/>
            
    </navigation>
            
        
    </page>
        
        
    <page view-id="*">
        
            
    <navigation from-action="#{identity.logout}">
                
    <redirect view-id="/home.xhtml"/>
            
    </navigation>

            
    <navigation from-action="#{hotelBooking.cancel}">
                
    <redirect view-id="/main.xhtml"/>
            
    </navigation>
            
        
    </page>
        
        
    <exception class="org.jboss.seam.security.NotLoggedInException">
            
    <redirect view-id="/home.xhtml">
                
    <message severity="warn">You must be logged in to use this feature</message>
            
    </redirect>
        
    </exception>

    </pages>

    一般來講,SEAM可以配合richfaces來使用,這樣可以補充標準的JSF組件不足的情況,并且richfaces和seam都是一家產品,所以運用起來可能會方便一些,在做SEAM應用的時候,推薦用richfaces做JSF的組件庫,當然,你也可以用別的組件庫,如apache的MyFaces.在配置文件建好模型以后,再為WEB工程添加項目所需要的庫,一般來說,需要添加的庫如下:
    jboss-seam-debug.jar 調試的時候用
    jboss-seam-ui.jar    調用seam的組件,比如<s:validate 等等
    jsf-facelets.jar     JSF的facelets技術
    richfaces-impl.jar   richfaces的實現庫
    richfaces-ui.jar     richfaces的UI庫
    richfaces-api.jar    richfaces的API庫
    jboss-el.jar         jboss的EL庫
    當然,根據不同的應用,可能所要包含的庫會有點不同,具體庫的依賴性,可以查看SEAM的官方說明.WEB項目的部份大概就這些,下一章,我們再說一說EJB項目的部份.







    盡管千里冰封
    依然擁有晴空

    你我共同品味JAVA的濃香.
    posted on 2008-05-06 15:53 千里冰封 閱讀(4198) 評論(5)  編輯  收藏 所屬分類: JAVAEENetbeans

    FeedBack:
    # re: 使用Netbeans開發Seam應用(一)
    2008-05-06 17:01 | 日月雨林
    如果要用RichFaces的話,現在已經有NetBeans的插件了,
    http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=8934

    如果有興趣可以看看Geertjan's 的博客!里面介紹了如何使用這個插件!
    http://blogs.sun.com/geertjan/entry/richfaces_for_netbeans_ide_6

    還有ICEfaces,現在官方只有6.0的插件,還沒有6.1的。我想應該很快就會有了,呵呵!
    http://www.icefaces.org/main/downloads/os-downloads.iface  回復  更多評論
      
    # re: 使用Netbeans開發Seam應用(一)
    2008-05-06 17:46 | 千里冰封
    @日月雨林
    是的,但是現在還沒有Seam的插件啊,所以配置有點麻煩,并且用Richfaces插件不一定適用于Seam,沒配好可能會庫沖突  回復  更多評論
      
    # re: 使用Netbeans開發Seam應用(一)
    2008-05-06 17:54 | 日月雨林
    還有個好消息就是現在已經有人在開發seam的NetBeans的插件了
    不過現在還沒有什么動靜,郵件列表業很長時間沒有更新了
    https://nbseam.dev.java.net/
    還有myfaces
    https://nbmyfaces.dev.java.net/  回復  更多評論
      
    # re: 使用Netbeans開發Seam應用(一)
    2008-05-06 18:25 | 日月雨林
    這個或許可以

    28 November 2007
    Many people ask me, when a version of facelets support will be available for NetBeans 6.0. Here you can donwload it.

    https://nbfaceletssupport.dev.java.net/files/documents/5684/77220/nbfaceletssupport-0-6.zip
      回復  更多評論
      
    # re: 使用Netbeans開發Seam應用(一)
    2009-08-06 09:33 | 魚中魚
    怎么會找不到類呢?org.jboss.seam.servlet.SeamListener
    我有jboss-seam2.1.jar這個文件啊

    java.lang.NoClassDefFoundError: javassist/util/proxy/MethodHandler
    at org.jboss.seam.contexts.Contexts.destroy(Contexts.java:243)
    at org.jboss.seam.contexts.Lifecycle.endApplication(Lifecycle.java:56)
    at org.jboss.seam.contexts.ServletLifecycle.endApplication(ServletLifecycle.java:135)
    at org.jboss.seam.servlet.SeamListener.contextDestroyed(SeamListener.java:40)
    at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:3882)
    at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4523)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4387)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:926)
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:889)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:516)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
    Caused by: java.lang.ClassNotFoundException: javassist.util.proxy.MethodHandler
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
    ... 29 more  回復  更多評論
      
    主站蜘蛛池模板: 人人狠狠综合久久亚洲高清| 日韩在线看片免费人成视频播放| 亚洲А∨精品天堂在线| 蜜臀亚洲AV无码精品国产午夜.| 成年女人午夜毛片免费视频| 亚洲日韩国产精品乱-久| 噼里啪啦电影在线观看免费高清 | 亚洲国产专区一区| 边摸边吃奶边做爽免费视频网站| 国产乱弄免费视频| 国产久爱免费精品视频 | 亚洲国产成a人v在线观看| 18国产精品白浆在线观看免费| 亚洲欧洲日产国码二区首页| 9久9久女女免费精品视频在线观看 | 国产精成人品日日拍夜夜免费| 亚洲中文字幕日产乱码高清app | 亚洲一区二区三区不卡在线播放| **俄罗斯毛片免费| 日韩亚洲国产高清免费视频| 在线免费一区二区| 草久免费在线观看网站| 亚洲男同帅GAY片在线观看| 久久精品免费电影| 亚洲一区二区三区深夜天堂| 国产精品免费一级在线观看| 国产精品极品美女自在线观看免费 | 四虎免费影院ww4164h| 亚洲精品永久在线观看| 亚洲国产成人乱码精品女人久久久不卡 | 一级毛片a女人刺激视频免费| 亚洲精品夜夜夜妓女网| 国产91色综合久久免费分享| 亚洲精品蜜夜内射| 亚洲无线码在线一区观看| 又粗又大又黑又长的免费视频| 美女18毛片免费视频| 老汉色老汉首页a亚洲| 国产片免费在线观看| 成人片黄网站色大片免费观看APP| 亚洲成人黄色在线|