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

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

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

    [標題]:[原]Struts2校驗框架
    [時間]:2009-7-27
    [摘要]:校驗框架配置、客戶端校驗
    [關鍵字]:浪曦視頻,Struts2應用開發系列,WebWork,Apache,validation
    [環境]:struts-2.1.6、JDK6、MyEclipse7、Tomcat6
    [作者]:Winty (wintys@gmail.com) http://www.tkk7.com/wintys

    [正文]:
        Struts校驗框架提供了一種不用編寫代碼,只需修改配置文件即可對輸入進行校驗的功能。代碼方式校驗,即重寫validate()方法。實際應用中,validate()與校驗框架一般只選其一

    1、校驗框架配置
        在RegisterAction.java相同目錄新建校驗框架配置文件RegisterAction-validation.xml。RegisterAction-validation.xml的DTD可以復制struts自帶的示例struts2-mailreader-2.1.6中的DTD:
    <!DOCTYPE validators PUBLIC
              "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
              "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

    xwork-validator-1.0.2.dtd:
    <?xml version="1.0" encoding="UTF-8"?>

    <!--
      XWork Validators DTD.
      Used the following DOCTYPE.
     
      <!DOCTYPE validators PUBLIC
              "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
              "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
    -->


    <!ELEMENT validators (field|validator)+>

    <!ELEMENT field (field-validator+)>
    <!ATTLIST field
        name CDATA #REQUIRED
    >

    <!ELEMENT field-validator (param*, message)>
    <!ATTLIST field-validator
        type CDATA #REQUIRED
        short-circuit (true|false) "false"
    >

    <!ELEMENT validator (param*, message)>
    <!ATTLIST validator
        type CDATA #REQUIRED
        short-circuit (true|false) "false"
    >

    <!ELEMENT param (#PCDATA)>
    <!ATTLIST param
        name CDATA #REQUIRED
    >

    <!ELEMENT message (#PCDATA)>
    <!ATTLIST message
        key CDATA #IMPLIED
    >


    RegisterAction-validation.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE validators PUBLIC
              "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
              "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
     
     <validators>
     <!--  
         與field等價的validator
         <validator type="requiredstring">
             <param name="fieldName">name</param>
             <param name="trim">true</param>
             <message>name required</message>
         </validator>
         <validator type="stringlength">
             <param name="fieldName">name</param>
                 <param name="trim">true</param>
                 <param name="minLength">6</param>
                 <param name="maxLength">10</param>
                 <message>name length range : ${minLength} ~ ${maxLength}</message>
         </validator>
     -->    
         <field name="name">
             <field-validator type="requiredstring" >
                 <param name="trim">true</param>
                 <message>name required</message>
             </field-validator>
             <field-validator type="stringlength">
                 <param name="trim">true</param>
                 <param name="minLength">6</param>
                 <param name="maxLength">10</param>
                 <message>name length range : ${minLength} ~ ${maxLength}</message>
             </field-validator>
         </field>
         
         <field name="age">
             <field-validator type="conversion" short-circuit="true">
                 <message>the field age conversion error</message>
             </field-validator>
             <field-validator type="int">
                 <param name="min">1</param>
                 <param name="max">150</param>
                 <message>age range: ${min} ~ ${max}</message>
             </field-validator>
         </field>
         
         <field name="birthday">
             <field-validator type="required">
                 <message>birthday required</message>
             </field-validator>
             <field-validator type="date">
                 <param name="min">2009-01-01</param>
                 <param name="max">2009-12-31</param>
                 <message>birthday range: ${min} ~ ${max}</message>
             </field-validator>
         </field>
         
         <field name="email">
             <field-validator type="email">
                 <message>invalid email address</message>
             </field-validator>
         </field>
     </validators>

    說明:
    a.校驗框架有兩種校驗方式:field和validator。
    field校驗:先指定需要校驗的屬性,再指定校驗方式。validator校驗:先指定校驗方式,再指定需要校驗的屬性。兩種方式是等價的。

    field校驗:
    <field name="name">
        <field-validator type="requiredstring" >
            <param name="trim">true</param>
            <message>name required</message>
        </field-validator>
        <field-validator type="stringlength">
            <param name="trim">true</param>
            <param name="minLength">6</param>
            <param name="maxLength">10</param>
            <message>name length range : ${minLength} ~ ${maxLength}</message>
        </field-validator>
    </field>

    validator校驗:
    <validator type="requiredstring">
        <param name="fieldName">name</param>
        <param name="trim">true</param>
        <message>name required</message>
    </validator>
    <validator type="stringlength">
        <param name="fieldName">name</param>
        <param name="trim">true</param>
        <param name="minLength">6</param>
        <param name="maxLength">10</param>
        <message>name length range : ${minLength} ~ ${maxLength}</message>
    </validator>

    b.<field-validator type="requiredstring" >中的type及其對應的xwork類可以在xwork-2.1.2.jar/com.opensymphony.xwork2.validator.validators/default.xml中查找到。
    default.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE validators PUBLIC
            "-//OpenSymphony Group//XWork Validator Config 1.0//EN"
            "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">

    <!-- START SNIPPET: validators-default -->
    <validators>
        <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
        <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
        <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
        <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
        <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
        <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
        <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
        <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
        <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
        <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
        <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
        <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
        <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
        <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
        <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
        <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
    </validators>
    <!--  END SNIPPET: validators-default -->

    c. 對于校驗<field-validator type="requiredstring" >:String用requiredstring,其它類型用required。
    d. 驗證錯誤將默認產生FieldError。
    e. short-circuit="true" : 一個校驗失敗,是否是繼續執行后續校驗。
    f. 對于相同屬性的FieldError,validate()方法中的驗證和RegisterAction-validation.xml中的驗證都會執行,并且FieldError都會顯示。
    執行順序: RegisterAction-validation.xml => validate()。


    2、特定于業務邏輯的局部校驗:
    對于struts.xml中<action>的method="register"指定的業務方法register(),使用校驗RegisterAction-register-validation.xml(與RegisterAction.java在同一目錄下)。同時,RegisterAction-validation.xml會被執行。執行順序:  RegisterAction-validation.xml => RegisterAction-register-validation.xml

    3、Struts2客戶端校驗
        設置struts標簽<s:form>中validate="true"。這樣就會根據RegisterAction-validation.xml生成頁面Javascript,在客戶端執行校驗。
     
     注意:
     a.struts標簽不能使用simple主題
     b.Struts2客戶端校驗功能較弱,一般不用。

    4、FieldError和ActionError的實現
    a.真正存放field級別錯誤信息的對象是LinkedHashMap。
    b.該LinkedHashMap的key是String類型的,value是ArrayList類型,所以同一個key可以對應多個錯誤消息。
    c.對于Action級別的錯誤信息,實際上是放置在ArrayList中的。
        
    [參考資料]:
        《浪曦視頻之Struts2應用開發系列》
    posted @ 2010-07-27 10:01 勒緊皮帶向前沖| 編輯 收藏
     

    一.WebContextLoaderListener 監聽類
    它能捕捉到服務器的啟動和停止,在啟動和停止觸發里面的方法做相應的操作!
    它必須在web.xml 中配置才能使用,是配置監聽類的

    二.下面是搜集的一些listener方面的知識
    簡例一
    監聽用戶上線與退出,顯示在線用戶

    1、登陸頁面 Login.jsp

    <%@page pageEncoding="gb2312" contentType="text/html; charset=gb2312" %>
    <%
    session=request.getSession(false);
    if(session!=null)session.invalidate();
    %>
    <html>
    <head><title></title></head>
    <body>
    <form action="isOnline.jsp" method="post">
    用戶名:<input type="text" name="uName"/>
    <input type="submit" value="上線">
    </form>
    </body>
    </html>

    2、控制頁面(只是為了說明監聽器問題,所以簡單了點...) isOnline.jsp

    <%@page pageEncoding="gb2312" contentType="text/html; charset=gb2312" %>
    <html>
    <head><title></title></head>
    <body>
    <%
    session=request.getSession();
    session.setAttribute("userName",request.getParameter("uName"));
    response.sendRedirect("showOnline.jsp");
    %>
    </body>
    </html>


    3、顯示頁面 showOnline.jsp

    <%@page pageEncoding="gb2312" contentType="text/html; charset=gb2312" import="java.util.ArrayList" %>
    <html>
    <head><title></title></head>
    <body>
    <%
    ArrayList showList=(ArrayList)(getServletContext().getAttribute("list"));
    out.print("在線人數 "+showList.size()+"<br>");
    for(int i=0;i<showList.size();i++){
    out.print(showList.get(i)+"在線"+"<br>");
    }
    %>
    <br>
    <a href="Login.jsp">退出</a>
    </body>
    </html>

    4、配置頁面 web.xml

    <?xml version="1.0" encoding="gb2312"?>
    <!DOCTYPE web-app
        PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd">
    <web-app>
    <listener>
        <listener-class>org.xiosu.listener.onlineListener</listener-class>
    </listener>
    </web-app>

    5、監聽器 onlineListener.java

    package org.xiosu.listener;

    import java.util.ArrayList;
    import javax.servlet.ServletContext;
    import javax.servlet.http.HttpSessionAttributeListener;
    import javax.servlet.http.HttpSessionBindingEvent;
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;

    public class onlineListener implements HttpSessionListener,
    HttpSessionAttributeListener {
    // 參數
    ServletContext sc;
    ArrayList list = new ArrayList();
    // 新建一個session時觸發此操作
    public void sessionCreated(HttpSessionEvent se) {
    sc=se.getSession().getServletContext();
    System.out.println("新建一個session");
    }
    // 銷毀一個session時觸發此操作
    public void sessionDestroyed(HttpSessionEvent se) {
    System.out.println("銷毀一個session");
    if (!list.isEmpty()) {
       list.remove((String) se.getSession().getAttribute("userName"));
       sc.setAttribute("list", list);
    }
    }
    // 在session中添加對象時觸發此操作,在list中添加一個對象
    public void attributeAdded(HttpSessionBindingEvent sbe) {
    list.add((String) sbe.getValue());
    sc.setAttribute("list", list);
    }
    // 修改、刪除session中添加對象時觸發此操作
    public void attributeRemoved(HttpSessionBindingEvent arg0) {
    }
    public void attributeReplaced(HttpSessionBindingEvent arg0) {
    }
    }


    說明:本例只為簡單介紹監聽器,并未進行安全方面設置。

    監聽器也叫Listener,是Servlet的監聽器,它可以監聽客戶端的請求、服務端的操作等。通過監聽器,可以自動激發一些操作,比如監聽在線的用戶的數量。當增加一個HttpSession時,就激發sessionCreated(HttpSessionEvent   se)方法,這樣
    就可以給在線人數加1。常用的監聽接口有以下幾個:
    ServletContextAttributeListener監聽對ServletContext屬性的操作,比如增加、刪除、修改屬性。
    ServletContextListener監聽ServletContext。當創建ServletContext時,激發contextInitialized(ServletContextEvent   sce)方法;當銷毀ServletContext時,激發contextDestroyed(ServletContextEvent   sce)方法。
    HttpSessionListener監聽HttpSession的操作。當創建一個Session時,激發session   Created(HttpSessionEvent   se)方法;當銷毀一個Session時,激發sessionDestroyed   (HttpSessionEvent   se)方法。
    HttpSessionAttributeListener監聽HttpSession中的屬性的操作。當在Session增加一個屬性時,激發attributeAdded(HttpSessionBindingEvent   se)   方法;當在Session刪除一個屬性時,激發attributeRemoved(HttpSessionBindingEvent   se)方法;當在Session屬性被重新設置時,激發attributeReplaced(HttpSessionBindingEvent   se)   方法。
    example:隨服務器啟動
    web-app>

          com.tb.listener.CountStartListener


    package com.tb.listener;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import javax.servlet.http.HttpServlet;
    import com.tb.timertask.DoCountTask;
    public class CountStartListener extends HttpServlet implements ServletContextListener
    {
    private static final long serialVersionUID = 1824920962239905170L;
    public CountStartListener()
    {
       // TODO Auto-generated constructor stub
    }
    public void contextDestroyed(ServletContextEvent arg0)
    {
       // TODO Auto-generated method stub
    }
       public void contextInitialized(ServletContextEvent arg0)
    {   
       DoCountTask.dotask();
    }
    }

    posted @ 2010-06-01 10:33 勒緊皮帶向前沖 閱讀(12658) | 評論 (0)編輯 收藏
     
         摘要: Flex+Spring+Hibernate整合  閱讀全文
    posted @ 2010-05-23 18:03 勒緊皮帶向前沖 閱讀(3916) | 評論 (2)編輯 收藏
     
    在分享這幾種配置之前,先簡單的介紹一下需要用到的一些資源。
    1、 MyEclipse+Flex 插件(官網下載)
    2、 Tomcat6.0作為服務器(官網下載)
    3、 用 BlazeDS(免費)代替 LCDS(收費) :沒錢啊,只能先使用免費的了。從 Adobe
    官方網站上下載下來,將 blazeds.war、ds-console.war、samples.war 三個文件放在
    tomcat的webapps目錄下。
    Flex+Java配置
    第一種: Java工程和 Flex 工程獨立,這種方式也是很多人使用的方式, Flex程序員和 Java
    程序員相互獨立的工作,這種方式網上有很多的資料,在這里就不再 贅述了。
    第二種:Flex工程加入 Java 元素
    1、 切換到 Flex視圖,新建 Flex project,如下圖

    說明: Java source folder 就是你自己 java業務源碼存放的根目錄,在 FB3 里, LCDS
    項目旨在將 Java J2ee 項目和 FlexLcds 項目混合。

    當然如果你不選擇 combined 兩個在一起,那么就麻煩些:要么你再單獨新建一個
    Flex 項目,而這個項目只寫 java代碼。要么再建一個J2ee工程寫 java代碼,而這

    因為我們是要 java 和 flex結合,所
    以在服務器選擇上我們選擇 J2EE

    存放java類的源文件,我們的目的
    就是Flex和 java在一個工程里,所
    以我們這里選擇上
    個項目只寫 Flex 代碼,但最后要把 Java 編譯后的 class 文件放到這個項目下的
    webroot\web-inf\classes 目錄中。即不管怎樣,最后發布時,java 編譯后的 class
    文件必須和 lcds 部署的項目在一起。
    2、 點擊Next,配置 J2EE服務器,如下圖

    說明:Target runtime 實際上沒什么用(后來我刪除了配置文件里的對應信息,也
    沒問題),但是不指定就不能繼續,如果這里顯示的是<none>那么就新建一個
    Tomcat 的runtime,簡單的只需要指定tomcat 的安裝目錄即可。

    Content folder 實際上就是最終編譯后的容器目錄,因此,BlazeDS 的 blazeds.war
    文件將會發布到 該目錄 下的 web-inf 下的 flex 目錄中。同時因為教程采用的是
    MyEclipse,他默認的就是發布 WebRoot 里的內容,為了自動化,因此這里改為了
    WebRoot(這也是 java 開發的習慣)

    Flex WAR file 指的是安裝了 lcds 后的 flex.war 文件的路徑,但是在這里我們采用
    的是BlazeDS來取代 lcds,所以這里設置的是 blazeds.war的路徑。

    Compilation options 指定了 flex 文件的編譯方式,選擇推薦的在 FlexBuilder 里編
    譯吧,雖然開發時多耗點時間,但是在發布后不會占用服務器的編譯處理時間,對
    用戶來說是有好處的。

    Output folder 指的是 Flex 編譯后的 swf 和 html 等文件存放的路徑,這里改為了
    WebRoot,意思是發布到根目錄就可以了。當然你可以根據你的需要和習慣自行設
    置其他的路徑

    因為我們采用的 BlazeDS,所
    以這里要設置 BlazeDS 的路

    這里我們可以自定義輸出路徑,
    一般情況下設置成根目錄
    WebRoot 就可以了
    3、 點擊下一步,采用默認的配置就可以,點擊完成,該工程就建立完成。下圖為該工
    程的目錄結構

    4、 讓它變成 web工程由MyEclipse發布吧


    Flex 文件的源文件夾Java 源文件夾自動生成的flex 的配置文件
    Flex 編譯后發布的文件。我們發布在根目錄下


    點擊Finish,現在我們的工程的圖標變成了 J2EE Web 工程了,這意味著,你可以


    注意,不要點的太快了,要把這里的
    對號勾掉,這樣就不會覆蓋 BlazeDS
    創建的 web.xml 用MyEclipse來發布它或者添加更多容器,比如hibernate、spring等

    5、 工程建好以后,你可以通過右鍵—>屬性來進行更多的設置。

    6、 這樣一個 Flex+Java的工程就建立完成。
    7、 編寫例子,測試在介紹完第三種方式以后統一介紹。

    第三種:由 Web project反向加入 Flex,也就是Java+Flex
    1、 先建立一個 web工程:flexweb。(略)
    2、 向flexweb 工程手工添加 Flex需要的元素。
    1)首先將 BlazeDS需要的jar文件拷到工程的 lib 目錄下。可以將上面建的那個 flex
    工程的 lib下的jar文件拷到該工程下的 lib目錄下。
    2)然后要加入 Flex BlazeDS需要的配置文件。在 WEB-INF下新建一個名為 flex 的文
    件夾,然后將我們上面建立的那個 firstFlex 該文件夾下的四個 xml 文件拷到該文件
    夾下。
    3)最后,修改 web.xml 文件,加入 Flex 的配置。做法一個簡單的把上面我們新建
    的那個 flex工程的web.xml的部分代碼拷過來。

    (注意:這樣會出錯,可以把

    <web-app version="2.4"
    xmlns="
    http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="
    http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
    http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    改為:<web-app>)(本人提示:這里經本人測試,并不需要這樣更改,本人的測試環境為Eclipse3.4+MyEclipse7.5,不排除在此版本前不需要做更改)


    <context-param>
    <param-name>flex.class.path</param-name>

    <param-value>/WEB-INF/flex/hotfixes,/WEB-INF/flex/jars</param-val
    ue>
    </context-param>

    <!-- Http Flex Session attribute and binding listener support -->
    <listener>

    <listener-class>flex.messaging.HttpFlexSession</listener-class>
    </listener>

    <!-- MessageBroker Servlet -->
    <servlet>
    <servlet-name>MessageBrokerServlet</servlet-name>
    <display-name>MessageBrokerServlet</display-name>

    <servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>
    <init-param>
    <param-name>services.configuration.file</param-name>

    <param-value>/WEB-INF/flex/services-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
    <servlet-name>MessageBrokerServlet</servlet-name>
    <url-pattern>/messagebroker/*</url-pattern>
    </servlet-mapping>
    3、 將該工程發布到tomcat下,并啟動 tomcat。(注:一定要啟動tomcat,因為在后面
    的設置中,它要驗證工程的路徑)
    4、 然后在該工程上右鍵?Flex Project Nature?Add Flex Project Nature



    5、 設置完成后,會發現 web工程的目錄結構已經發生了改變,如下圖。
    我們發現以這種形式建立的工程的目錄結構和第二種方法有少許的不同,flex 的
    mxml文件默認的放在 src文件夾中,和java文件共用一個目錄。并且沒有像上一個
    工程那樣自動的編譯出可運行的文件。

    配置服務器路徑
    配置正確的顯示
    建議不要修改這里的配置

    6、 如果你對這個目錄結構不太滿意,還想讓 flex 的文件放在 flex_src 目錄下,別急,
    我們可以通過右鍵?屬性來設置。如下圖

    在這里你可以重新設置你的 flex源文件夾和輸出目錄
    7、 配置 flex 默認的 sdk。這樣配置完,還不行,程序可能還不能正常地運行,還需要
    配置他使用的 sdk。如下圖

    8、 馬上就大功告成了,讓我們來寫個程序測試一下吧。
    1)新建一個 java類:Hello.java
    package com;

    public class Hello {
    public String hello(String name){
    System.out.println("flex調用我了,真好~~~~");
    return "hello "+name;
    }
    }
    2)為flex配置這個要調用的對象,修改WEB-INF/flex下remoting-config.xml
    加入:
    <destination id="hello">
    <properties>
    <source>
    com.Hello
    </source>
    </properties>
    </destination>

    3)編寫一個Flex程序
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx=" layout="absolute">
    <mx:Script>
    <![CDATA[
    import mx.rpc.events.ResultEvent;

    function gg(evnet:ResultEvent):void{
    var ff:String = evnet.result as String;
    ggg.text = ff;
    }

    function remotingSayHello():void{
    var sname:String = nameInput.text;
    h.hello(sname);
    }
    ]]>
    </mx:Script>

    <mx:RemoteObject destination="hello" id="h"
    result="gg(event)"
    endpoint="
    http://localhost:8080/flexweb/messagebroker/amf" >

    </mx:RemoteObject>


    <mx:TextArea id="ggg" x="109" y="122"/>

    <mx:Button label="say hello" click="remotingSayHello();"
    x="144" y="193"/>
    <mx:TextInput id="nameInput" x="109" y="73"/>
    <mx:Label text="name" x="47" y="75"/>
    </mx:Application>
    4)重啟tomcat,運行flexweb.mxml.
    第三種方法,在編譯完后,訪問網頁會出現 404 異常。具體原因不詳。但是它仍會編譯出
    一個 swf文件,訪問這個 swf 即可。而第二種方式可以編譯出一個 html 文件。訪問一下會出
    現一下界面:
    輸入 dfdff,則輸出 hello dfdff。說明調用 java 類成功。不信我們可以看看 java
    類在控制臺上的打印。

    配置成功,高興吧,o(∩_∩)o…哈哈。
    如果用 lcds,則不需要預編譯,可以直接訪問 mxml 文件,lcds 會動態編譯返回結果。(本人提示:其實你可以通過在上面配置中的flex輸出目錄中訪問其html文件例如:http://127.0.0.1:8080/xxx/xxx_debug/xxx.html

    解決:

    倒數第11行的404 異常,我對比第二種和第三種發現第三種漏了


    這個文件夾,所以解決辦法:把漏的文件夾整個從第二種拷一份到項目中、刷新,一定要刷新到到出現

    這個文件夾有這些內容,才可以成功。

    注:文章中出現的“本人提示”是轉載者,不是原作者。
    (本人提示:對于第三種方式整合,建議其需要修改的文件全從第二種拷貝,這樣能避免一個status404錯誤)。
    posted @ 2010-05-18 23:34 勒緊皮帶向前沖 閱讀(3451) | 評論 (1)編輯 收藏
     

    不可否認MyEclipse現在越做越強大(畢竟是收費的嘛),強大到開始排斥第三方插件,這有些不符合Eclipse的初衷,Eclipse就是靠良好的擴展性發展起來的。

    MyEclipse從7.5開始(7.0沒用過,不知道),完全改變了程序結構,現在擴展第三方插件 再也沒有以前那么方便了,特別是link方式,這對程序員來說是致命的。Flex Plugin 安裝時需要選擇Eclipse目錄,7.5中根本沒有Eclipse目錄,所以想直接在myeclipse中安裝flex plugin是不太可能。我試過將flex里的features和plugins目錄拷貝到myeclipse中進行強制安裝,還是失敗,所以最后只能將Eclipse,Flex plugin和myeclipse分開進行安裝。

    MyEclipse 7.5對應的Eclipse 版本為3.4,先到www.Eclipse.org官網去下載Eclipse3.4的版本。然后再到Myeclipse官網(已屏蔽大陸IP,需代理,但下載可以用迅雷直接下)去下載增量升級包,注意,一定要是增量升級包,即archived update site.zip 這個包,不能下載集成安裝包,flex builder plugin 的版本也必須為3.02,這一點很重要,Adobe官網已經很明確的說明了3.0本版存在bug,不能再Eclipse3.4  中安裝,已經下載3.0本版的可以到Adobe官網或google 中去下載補丁。安裝順序是,先解壓Eclipse3.4 ,然后安裝 Flex plugin ,和以前的安裝方法一樣,選好目錄,直接下一步就行,然后再通過Eclipse的Help->Software Updates->Available Software ->Add site->Archive安裝剛才下載的MyEclipse7.5 的增量升級包。如果你RP不是特別差的話,應該就大功告成了,Enjoy this !

    同樣,MyEclipse8.0中的Flex plugin 也可以這樣安裝。需要說明的是MyEclipse8.0 對應的Eclipse版本是3.5 。Eclipse3.5 對應的Flex plugin為4.0.目前Flex plugin 4.0的正式版還沒出,還是Beta 版 ,Flex builder4 已經正式更名為 Flash builder4了 ,還是喜歡Flex builder的命名,感覺更加專業點,哈哈!


    本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/turejackon/archive/2010/03/10/5365821.aspx

    posted @ 2010-05-17 09:46 勒緊皮帶向前沖 閱讀(1548) | 評論 (0)編輯 收藏
     
         摘要: Ext:讓Grid支持中文排序  閱讀全文
    posted @ 2010-04-01 11:02 勒緊皮帶向前沖 閱讀(665) | 評論 (0)編輯 收藏
     
    開發環境:Struts2.0.11.1
    問題描述:當點擊頁面鏈接時候,隨機出現以下對話框,Internet Explorer無法打開Internet站點http://localhost:8080/kmtcm/login.action 已終止操作
    問題原因:頁面使用了My97DatePicker這個日期控件,大概是在IE下載完了源文件但沒有加載完,這個時候用JS的DOM對象的AppdenChid和innerHTML就會出錯。我用FireFox試下,完全沒有問題。
    解決方法使用其他日歷控件代替。
    在此我替換使用的是jquery ui的日歷插件。
    關于使用方法(轉自:http://hi.baidu.com/fairywood/blog/item/638bee30e4d4649ea8018ec8.html):
    JQuery 日期控件
    2009-02-12 13:16
        JQuery提供了很多控件, 例如用于選擇日期的日期控件(Date Picker)。這些控件并沒有隨Jquery的核心庫一并發布。而是作為一個叫做"JQuery UI"的子項目——或者叫做插件——的形式發布。
    所以, 我們除了要在頁面中引用jquery的那個js文件外, 還需要在http://jqueryui.com/下載與我們使用JQuery對應版本的JQuery UI的程序包。
    目前, 最新的JQuery版本是1.3。 與這個版本對應的JQuery UI版本是1.6rc6。
    由于JQuery UI采取了顯示和功能分離的設計(皮膚, 或者叫”換膚“)。所以, 我們需要為日期控件附加樣式。JQuery UI最神奇的特點之一就是提供了一個網站來給我們修改控件的樣式:http://jqueryui.com/themeroller/。在這個頁面中, 將控件樣式調整滿意后, 點擊左側的"Download theme"按鈕。就可以把樣式下載下來了。現在, 下載的是JQuery UI1.6rc5版本所使用的樣式庫。如果您用的較低的1.5, 那么請注意在點擊”Download theme“按鈕后出現頁面的右側選擇相應的版本。不然, 不同版本的樣式是不兼容的。
    將下載下來的zip包解開, 我們可以看到里面已經準備好我們要用jquery核心庫和JQuery UI的庫。首先, 我們把jquery-1.3.x.js復制到網站的js目錄下,jquery-ui-personalized-1.6rc6.min.js、i18n目錄、theme目錄復制到網站js/ui目錄下。
    JQuery核心庫的安裝非常簡單, 我們把jquery.1.3.x.js文件引入頁面即可。一般來說, 我們會把這個js文件改名為jquery.js, 放到“/js"目錄下。
    然后, 我們將jquery-ui-personalized-1.6rc6.min.js引入頁面。如果覺得它的文件名太長。可以直接改成jquery-ui.js或者其他比較短的名字。
    最后, 引入分別引入js/ui/theme/ui.all.css樣式表以及/js/ui/i18n/ui.datepicker-zh-CN.js腳本文件到頁面中。就完成了中文日期控件的安裝。如果我們需要其他語言的空間, 請更換ui.datepicker-zh-CN.js文件。在js/ui/i18n中有很多其他語言的腳本。
    終于, 我們可以在頁面中,給某個輸入框綁定一個日期控件了。例如, 我們的頁面中有這么一個input:
    <input type="text" id="birthday" name="birthday"/>
    那么, 我們可以在$(document).ready()的事件函數(不懂的可以參見Jquery核心庫的說明或者網上的相關資料)中寫:$("birthday").datepicker();
    現在打開頁面, 如果不出意外。當我們點擊這個文本框的時候就可以出現一個很炫的日期控件了。

    現在修改一下:$("#bithday").attr("readonly", "true").datepicker(); 這樣一來,用戶就不能手工輸入, 而只能通過控件選擇日期了。

    上面簡單介紹了一下日期控件的使用方法。其實, 他們的可定制性是非常高的。今天我們只是使用了它們最簡單最基本的功能。
    posted @ 2010-02-26 14:03 勒緊皮帶向前沖 閱讀(1892) | 評論 (0)編輯 收藏
     
    晚上做DEMO的時候遇到了這個問題,其實字面意義很明了:一個是display:inline把元素顯示為行內元素,float:left讓其脫離文檔流,浮動起來。但對其具體的用處和區別還是不解。
    于是google一下,好像這個問題并不像其它問題一樣有很多博客轉載,但還是找到了一些可以參考的東西。
    細看了下,網上僅有的一些資料都是轉載自這篇博文:http://andymao.com/andy/post/42.html。我也看了一下,但說實話只看懂了一半(可能是對標準化頁面的設計還了解得不夠深)。
    于是動手做了一下實驗,一目了然:

    例:
    XHTML部分
    <ul class="disp">
    <li>aaa</li>
    <li>bbb</li>
    <p>asdfadsf</p>
    </ul>

    <ul class="floa">
    <li>ccc</li>
    <li>ddd</li>
    <p>eweweew</p>
    </ul>
    CSS部分:
    ul.disp li
    {
    display:inline;
    }
    ul.floa li
    {
    float:left;
    }
    結果:
    第一個class為disp的UL里LI顯示為aaa,bbb為同一行,而
    asdfadsf則另起了一行。前兩個都均已經設為了行內元素。所以它們還是占著一行,下一個元素就另起了一行。
    第二個class為 floa的UL里三個L均I顯示在同一行里,因為前兩個已經設為了float:left脫離了標準的文檔行,而下一個塊級元素,則忽略了前面的元素,而繼續按照標準的文檔進行排列。

    最后摘抄一下,瀏覽到有用的資料:

    首先我們要明確,display:inline;與float:left;正確含義。display:inline;(內聯)《CSS權威指南》中文字顯示:任何不是塊級元素的可見元素都是內聯元素。其表現的特性是“行布局”形式,這里的“行布局”的意思就是說其表現形式始終以行進行顯示。比如,我們設定一個內聯元素border-bottom:1px solid #000;時其表現是以每行進行重復,每一行下方都會有一條黑色的細線。如果是塊級元素那么所顯示的的黑線只會在塊的下方出現。

    當然這看起來不像是display:inline;與float:left;的區別所在,但是當理解了float:left;的特性那么我們就清楚到底是怎么回事了。float:left;(左浮動)他使得指定元素脫離普通的文檔流而產生的特別的布局特性。并且FLOAT必需應用在塊級元素之上,也就是說浮動并不應用于內聯標簽。或者換句話來說當應用了FLOAT那么這個元素將被指定為塊級元素。

    那么我們很清楚了,內聯(display:inline;)元素不能設置寬高,因為內聯屬于行布局,其特性是在一行里進行布局,所以不能被設定寬高。

    posted @ 2010-02-23 10:37 勒緊皮帶向前沖 閱讀(661) | 評論 (0)編輯 收藏
     
         摘要: 后臺報SQL Error: 1064, SQLState: 42000錯誤,Could not synchronize database state with session   閱讀全文
    posted @ 2010-01-09 11:25 勒緊皮帶向前沖 閱讀(9424) | 評論 (1)編輯 收藏
     
    新的項目決定使用s2sh框架,于是按文檔整合好,在加入tiles后,啟動包實例化tles實例化不能。翻篇看文檔,找解決。
    同事也同樣遇到這樣的問題。經兩人花費兩天時間后中解決。
    由于jar包的沖突,特別是asm這個包,我和同事,是用了不同的asm版本,他使用低版本,我使用高版本。
    因此,將我和他的jar包做個截圖,以供以后配置。
    先是同事的




    我使用的jar包



    請一定要注意在s2sht中去掉xerces-2.6.2.jar這個jar包,導致tiles不能啟動的元兇。(上面貼出的jar可直接使用)
    我和同事用于是用不同版本的asm.jar包,因此將高版本解決方法貼出。(解決方法來自:http://edu.codepub.com/2009/1215/18741.php
    解決辦法是:
    1.去掉類路徑上的關于Hibernate的3個lib
    asm.jar
    asm-attrs.jar
    cglib-2.1.3.jar
    2.加入Spring中的以下4個lib
    asm-2.2.2.jar
    asm-commons-2.2.2.jar
    asm-util-2.2.2.jar
    cglib-nodep-2.1_3.jar

    注:我們是用的MyEclipse8自帶的jar包。struts2.18,hibernate3.2,spring2.5
    posted @ 2010-01-07 13:48 勒緊皮帶向前沖 閱讀(1153) | 評論 (0)編輯 收藏
    僅列出標題
    共14頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 Last 
     
    主站蜘蛛池模板: 天堂在线免费观看| 日韩免费高清播放器| 国产v精品成人免费视频400条| 亚洲AV无码精品色午夜果冻不卡| 中国黄色免费网站| 亚洲精品国产字幕久久不卡| 中文字幕无码毛片免费看| 久久国产亚洲观看| 中文字幕免费视频一| 亚洲成a人片在线观看播放| 国产一卡2卡3卡4卡2021免费观看 国产一卡2卡3卡4卡无卡免费视频 | 亚洲裸男gv网站| 两个人的视频www免费| 久久精品国产精品亚洲精品 | 免费日本黄色网址| av片在线观看永久免费| 在线观看亚洲av每日更新| 国产在线国偷精品免费看| 亚洲欧洲国产日韩精品| 波多野结衣在线免费观看| 亚洲av无码不卡久久| 国产精品久久免费视频| 深夜久久AAAAA级毛片免费看| 狠狠亚洲婷婷综合色香五月排名| 男的把j放进女人下面视频免费| 亚洲精品国产福利片| 日本一道综合久久aⅴ免费| 一本久久A久久免费精品不卡 | 亚洲av福利无码无一区二区| 最近免费中文字幕大全免费| 伊人久久五月丁香综合中文亚洲| 免费少妇a级毛片| 亚洲国产精品免费视频| 亚洲精品久久无码| 亚洲国产精品无码久久久不卡| 中文字幕乱码免费视频| 九九免费久久这里有精品23| 亚洲黄网在线观看| 亚洲精品无码久久不卡| 日韩精品无码区免费专区| 一级一黄在线观看视频免费|