每天一點進步
          我們每天都進步一點,那常年累月下來將是很大的進步,從現(xiàn)在開始還不晚。
          posts - 4,  comments - 0,  trackbacks - 0
                  學(xué)習(xí)了一段時間birt,發(fā)現(xiàn)每一個報表都要設(shè)置數(shù)據(jù)源,這樣以后要是改動了,數(shù)據(jù)庫的鏈接,那樣每個報表的數(shù)據(jù)源都要更改,那樣工作量是很大的,研究了下發(fā)現(xiàn)可以使用公用library的可以很好的解決這個問題。
                1、點擊eclipse的新建,里面可以發(fā)現(xiàn)有個library,點擊新建library庫,起名ds.rptlibrary  我放在頁面的根目錄下面。
                 2、在里面新建數(shù)據(jù)源,配置連接到你的數(shù)據(jù)庫,我起名字叫data
                 3、報表中引用ds.rptlibrary. 關(guān)鍵啊,打開你要引用的報表,比如a,
                       在eclipse左下角添加,resource explorer 控件,打開找到ds.rptlibrary,展開找到data,點擊右鍵add to report,
                       就添加了到現(xiàn)有報表數(shù)據(jù)源里面,注意,網(wǎng)上有些說法是把data拖過去,那樣在修改data的時候拖過去的那個data不會進行改變。一定要add to report過去,
          還有在修改data的時候不要打開別的報表,否則回詢問你是否不在和data關(guān)聯(lián),
          一般點是以后,在修改data那個報表也不跟著表了,
          這是因為拖過去的就是拷貝一份現(xiàn)有數(shù)據(jù)庫連接到報表里面。
               關(guān)鍵的關(guān)鍵啊。。。。。 數(shù)據(jù)源添加過去以后,一定在在該報表的xml  source 里面去修改下ds.rptlibrary的路徑,默認的路徑在網(wǎng)頁上查看報表的時候是找不到的, 報錯。,
          比如我放在了根目錄,路徑是這樣的
          一定要把前面的名稱去掉。
          <list-property name="libraries">
                  <structure>
                      <property name="fileName">ds.rptlibrary</property>
                      <property name="namespace">ds</property>
                  </structure>
              </list-property>

          下次研究如何讀取項目中的數(shù)據(jù)庫配置文件,爭取就在一個地方配置數(shù)據(jù)庫就可以了。
          posted @ 2010-02-04 14:17 聰明的老虎 閱讀(1055) | 評論 (0)編輯 收藏
              在使用birt報表的時候感覺頁面的 BIRT Report Viewer頭標(biāo)題沒有用,想去掉在網(wǎng)上一查原來有詳細的參數(shù)設(shè)置,看來birt的功能還是很強大啊。現(xiàn)在轉(zhuǎn)帖如下:
             BIRT作為一款功能強大的開源報表工具,其版本的升級更新速度也非常快,從1.0到2.0,一直到最新的2.2.1版本,無論從功能上還是性能上都得到了極大的提高和擴充。BIRT也提供了一個標(biāo)準的J2EE實現(xiàn)組件,可以發(fā)布到支持J2EE應(yīng)用的web server服務(wù)器上,可以對生成的報表進行預(yù)覽等操作。在大家使用BIRT Viewer的時候,可能會對它日益紛繁的參數(shù)設(shè)置如云里霧里,在網(wǎng)上論壇里也有很多人碰到這樣哪樣的問題,同時官方的文檔也不細致不全。所以我就對這些參數(shù)進行了一個簡單系統(tǒng)的總結(jié),希望能對大家的BIRT開發(fā)有所幫助。這些參數(shù)以2.2.1版本為準,請大家特別注意。

          1. Servlet模式說明

            查看BIRT Viewer自帶的web.xml文件,可以看到有以下幾個pattern:

            frameset ---- 采用Ajax框架,可以顯示工具條,導(dǎo)航條和TOC面板,實現(xiàn)復(fù)雜的操作,如分頁處理,導(dǎo)出數(shù)據(jù),導(dǎo)出報表,打印等等。該模式下會自動生成report document文件(預(yù)覽report design文件)到特定的目錄(用戶可以用參數(shù)指定,也可以定義在web.xml里)。采用Ajax,速度較慢。

            run ---- 也采用Ajax框架,但不實現(xiàn)frameset的復(fù)雜功能,不會生成臨時的report document文件(預(yù)覽report design文件),也不支持分頁,這個主要是應(yīng)用在BIRT Designer里的preview tab里,可以支持cancel操作,其它不怎么常用。采用Ajax,速度較慢。

            preview --- 沒有用到Ajax框架,直接調(diào)用底層Engine API對報表進行render,把生成的報表內(nèi)容直接輸出到瀏覽器。這種模式和run模式調(diào)用的是相同的Engine API,唯一區(qū)別在于run采用Ajax獲取報表內(nèi)容,而preview直接輸出到瀏覽器。如果要支持分頁,用戶需要在URL上定義__page和 __pagerange參數(shù),這兩個參數(shù)也會在后面詳細說明。需要特別說明的是,在這幾種預(yù)覽模式中,preview的速度是最快的。

            document --- 該模式主要是為了從report design文件生成report document文件。用戶可以在URL上提定document文件生成存放的路徑(存放在server端),如果未指定,會直接生成 rptdocument發(fā)送到客戶端瀏覽器,用戶可以下載到客戶端。

            output --- 該模式類似于frameset,會自動生成report document文件(預(yù)覽report design文件),區(qū)別在于output不采用Ajax,而是將生成的報表內(nèi)容直接輸出到瀏覽器。

            parameter --- 該模式主要用于生成一個參數(shù)對話框,一般用戶不常用,用戶可以直接通過提供的JSP Tag--parameterPage去實現(xiàn)參數(shù)對話框,不需要直接調(diào)用。

            download --- 用于導(dǎo)出報表數(shù)據(jù)為CSV格式,當(dāng)你使用frameset工具條里的導(dǎo)出數(shù)據(jù)功能時,會用到這個模式。

          2. web.xml里的參數(shù)設(shè)置
          web.xml文件里有許多參數(shù),用戶應(yīng)該根據(jù)自已的需求出發(fā)對這些參數(shù)有一個深入的了解。下面我會對這些參數(shù)一一做以說明。

          [BIRT_VIEWER_LOCALE]
          設(shè)置默認的Locale信息,暫時沒有太大意義。因為Locale的信息,首先以URL上定義的__locale為準,如果沒有定義,會找到當(dāng)前瀏覽器的Locale信息,最后才會用到這里定義的信息。

          [BIRT_VIEWER_WORKING_FOLDER]
          設(shè)置BIRT Viewer的工作目錄。用戶可以把report design或是report document文件存放在這個目錄下,這樣就可以在URL上采用相對路徑去預(yù)覽這些報表文件了。默認是當(dāng)前根目錄。
          當(dāng)前支持三種形式:
          相對路徑 --- 這個相對當(dāng)前的WEB應(yīng)用的context root.
          絕對路徑
          JAVA系統(tǒng)變量 --- 可以在啟動服務(wù)器時,定義JVM的系統(tǒng)變量,如java –Dmyworkingfolder=D:/reports。這樣就可以在web.xml中用${myworkingfolder}進行引用了。

          [BIRT_VIEWER_DOCUMENT_FOLDER]
          設(shè)置生成的document文件的存放路徑。默認是documents目錄。路徑設(shè)置同上。

          [WORKING_FOLDER_ACCESS_ONLY]
          簡單的報表訪問限制控制實現(xiàn),如果設(shè)為true,哪就只能預(yù)覽存放在工作目錄下的報表文件。默認值是false。

          [BIRT_VIEWER_IMAGE_DIR]
          設(shè)置生成的臨時圖片的存放路徑。默認是report/images目錄。路徑設(shè)置同工作目錄設(shè)置。

          [BIRT_VIEWER_LOG_DIR]
          設(shè)置生成的日志文件存放路徑。默認是logs目錄。路徑設(shè)置同工作目錄設(shè)置。

          [BIRT_VIEWER_LOG_LEVEL]
          設(shè)置日志的level,可選的值有:ALL|SEVERE|WARNING|INFO|CONFIG|FINE|FINER|FINEST|OFF。級別由高到低。

          [BIRT_VIEWER_SCRIPTLIB_DIR]
          設(shè)置用戶script lib文件的存放目錄( 在報表中用到的Java Event Handler Class )。默認值是scriptlib。路徑設(shè)置同工作目錄設(shè)置。

          [BIRT_RESOURCE_PATH]
          設(shè)置用戶資源存放路徑,這些資源包括library文件,image文件等。默認是當(dāng)前根目錄。路徑設(shè)置同工作目錄設(shè)置。

          [BIRT_VIEWER_MAX_ROWS]
          設(shè)置獲取dataset的最大記錄數(shù)。主要應(yīng)用于設(shè)計報表的時候,預(yù)覽報表如果記錄數(shù)太多,會花費很多的時間,也可能會引起out of memory問題。默認是不限制。

          [BIRT_VIEWER_MAX_CUBE_LEVELS]
          設(shè)置CUBE查詢的最大級數(shù)。和前面的參數(shù)作用類似。默認是不限制。

          [BIRT_VIEWER_CUBE_MEMORY_SIZE]
          設(shè)置在生成CUBE時,可以寫在memory中的最大值,單位是MB。可以提高效率,寫在內(nèi)存會比直接寫在硬盤快很多。但同時也要注意內(nèi)存占用的問題。

          [BIRT_OVERWRITE_DOCUMENT]
          該參數(shù)主要用于frameset/output模式,它們會生成臨時的document文件上。如果設(shè)為true,則每次刷新頁面時,都會重新去生成document文件,如果為false,則不會重新生成,只會用原來的document文件去生成報表內(nèi)容。

          [BIRT_VIEWER_CONFIG_FILE]
          定義properties文件的路徑,不可以修改。

          [BIRT_VIEWER_PRINT_SERVERSIDE]
          在frameset工具條上,提供有后臺服務(wù)器打印的功能,該參數(shù)可以設(shè)置是打開還是關(guān)閉后臺打印的功能。默認是打開。可選值為: ON 和 OFF。

          [HTML_ENABLE_AGENTSTYLE_ENGINE]
          這個參數(shù)是會傳遞給Engine的,主要用于一些CSS的兼容性方面的問題。默認值是true。

          3. viewer.properties參數(shù)設(shè)置
          viewer.properties文件主要是定義一些擴展的參數(shù)。

          # configurable variable for JSP base href. Please uncomment the below line.
          #base_url=http://127.0.0.1:8080
          該設(shè)置主要應(yīng)用于代理服務(wù)器的情況下,在使用代理服務(wù)器后,從request里獲取的URI并非真正的URI,需要在這里定義。

          # [EXTENSION SETTING]
          viewer.extension.html=html
          viewer.extension.pdf=pdf
          viewer.extension.postscript=ps
          viewer.extension.doc=doc
          viewer.extension.xls=xls
          viewer.extension.ppt=ppt
          定義輸出的報表文件的后綴名,和format相關(guān)聯(lián)。

          # [OUTPUT FORMAT LABEL NAME]
          viewer.label.html=HTML
          viewer.label.pdf=PDF
          viewer.label.postscript=PostScript
          viewer.label.doc=Word
          viewer.label.xls=Excel
          viewer.label.ppt=PowerPoint
          定義導(dǎo)出報表對話框里的報表格式列表,和format相關(guān)聯(lián),這樣名字會更有意義。

          # [CSV SEPARATOR]
          viewer.sep.0=,
          viewer.sep.1=;
          viewer.sep.2=:
          viewer.sep.3=|
          viewer.sep.4=\t
          支持多種CSV分隔符,用戶也可以增加新的分隔符(只支持char,而不是string)。但同時需要修改JSP文件和Messages.properties文件。

          # [LOGGERS]
          # "logger."+class=level
          # if no level is specified or the text "DEFAULT",
          # then the default level from the web.xml will be used
          logger.org.eclipse.datatools.connectivity.oda=DEFAULT
          logger.org.eclipse.datatools.enablement.oda=DEFAULT
          當(dāng)前的日志都是通過Engine輸出的,如果需要其它組件的日志輸出,可以在這里定義。注意格式必須為logger.org……。而且該組件必須實現(xiàn)了java的logger。
          可以單獨為該組件設(shè)置日志級別,如果設(shè)為DEFAULT,就會使用web.xml里的設(shè)置。

          4. URL參數(shù)
          下面是一些主要用到的URL參數(shù)。

          “__report”
          定義要預(yù)覽的rptdesign文件路徑,支持相對路徑和絕對路徑,相對路徑是相對于web.xml中定義的工作目錄。

          “__document”
          定義要預(yù)覽的rptdocument文件路徑,同樣支持相對和絕對路徑。相對路徑是相對于web.xml中定義的工作目錄。在同時定義了__report 和__document參數(shù)時,以__document為優(yōu)先,如未找到相應(yīng)的document文件,才會從design文件生成document文件 (frameset/output)或是直接去render這個design文件(preview/run)。

          “__title”
          定義報表顯示的標(biāo)題。

          “__showtitle”
          是否顯示frameset模式下上方的標(biāo)題部分。true | false

          “__toolbar”
          是否顯示frameset模式下的工具條。true | false

          “__navigationbar”
          是否顯示frameset模式下的導(dǎo)航條。true | false

          “__parameterpage”
          是否強制彈出或不彈出報表參數(shù)對話框。true | false

          “__format”
          輸出報表的格式,默認為html。現(xiàn)在支持:pdf | doc | xls | postscript | ppt

          “__locale”
          設(shè)置Locale信息,如 __locale=zh_CN, 注意必須是國家加語言。

          “__svg”
          設(shè)置chart輸出是否以SVG格式輸出。true | false
          frameset和run模式下,會采用javascript判斷客戶端瀏覽器是否支持svg,但并非對所有瀏覽器有效。

          “__bookmark”
          設(shè)置頁面要定位的書簽名字。

          “__istoc”
          指定定位的書簽是不是一個TOC名字。如為true,就會根據(jù)__bookmark參數(shù)值去獲取一個真正的書簽名,從而實現(xiàn)正常的跳轉(zhuǎn)。這個主要用于定位到一個TOC上。

          “__rtl”
          指定HTML頁面輸出是否需要right to left。支持不同國家的閱讀習(xí)慣,如阿拉伯國家是從右到左的。

          “__page”
          指定要輸出的報表頁數(shù),這個依賴于報表的分頁設(shè)計(page break)。

          “__pagerange”
          指定要輸出的報表頁數(shù)范圍。如1,3,5-9。

          “__resourceFolder”
          定義資源目錄路徑。同web.xml中的BIRT_RESOURCE_PATH設(shè)置。

          “__asattachment”
          是否以附件方式下載報表,如生成PDF或是其它格式里。默認是inline。

          “__masterpage”
          是否要顯示master page。true | false

          “__designer”
          該參數(shù)主要是應(yīng)用在BIRT Designer環(huán)境下,如會讀取cache的報表參數(shù)等等,一般不用。true | false

          “__overwrite”
          該參數(shù)同web.xml定義的參數(shù),不過web.xml里是全局設(shè)置,在URL上通過參數(shù)可以定義本次操作的設(shè)置。

          “__imageID”
          內(nèi)部參數(shù),用于image的引用,一般不用。

          “__maxrows”
          設(shè)置Dataset查詢的最大記錄數(shù),要注意這個設(shè)置是全局的,會影響后面所有的請求。主要用于BIRT Designer下,提高報表設(shè)計效率。同web.xml中的BIRT_VIEWER_MAX_ROWS設(shè)置。

          “__maxlevels”
          設(shè)置查詢獲取Cube的最大級數(shù)。同上面的__maxrows,也主要用于BIRT Designer設(shè)計環(huán)境。
          同web.xml中的BIRT_VIEWER_MAX_CUBE_LEVELS設(shè)置。

          “__cubememsize”
          同web.xml中的BIRT_VIEWER_CUBE_MEMORY_SIZE參數(shù)設(shè)置。

          “__instanceid”
          如果查看BIRT輸出的HTML代碼,你就可以看到一些HTML Element會有一個iid的屬性(如table),這個就是instanceid。這個是Engine動態(tài)生成的,不可提前預(yù)知。所以你需要從 HTML代碼中得到這個值。該參數(shù)主要是為了獲取reportlet(報表片斷,如只輸出報表中的一個Table或是一個Chart)。需要配合 __isreportlet參數(shù)。

          “__isreportlet”
          指定當(dāng)前輸出是不是一個reportlet。true | false
          特別說明:為了輸出一個reportlet,BIRT現(xiàn)在提供兩種方式。
          1. 為要輸出的對象(表格或是Chart)定義一個bookmark,然后可以用下面的URL輸出reportlet.
          http://localhost:8080/birt/frameset?__report=test.rptdesign&__bookmark=bk&__isreportlet=true

          2. 采用instanceid,但這個值事先是無法預(yù)知的,需要預(yù)覽一次后從HTML代碼中得到。然后用下面的URL輸出reportlet.
          http://localhost:8080/birt/output?__report=test.rptdesign&__instanceid=iid&__isreportlet=true
          還有就是要注意,reportlet只支持document文檔。如果是預(yù)覽design文檔去輸出reportlet,就必須要使用frameset/output(自動生成document文檔)。

          “__clean”
          BIRT里臨時生成的一些文件都是和session相關(guān)的,比如臨時document文件,還有image文件。這些文件也可以通過session進行管理,這個參數(shù)就是指定是否需要在session timeout的時候清除這些臨時文件。默認值是true。
          true | false

          “__dpi”
          可以設(shè)置輸出Chart的dpi數(shù)值。

          “__fittopage”
          暫時這個參數(shù)只對PDF和postscript格式報表有效,指定是否調(diào)整至適合頁面。

          “__pagebreakonly”
          暫時這個參數(shù)只對PDF和postscript格式報表有效,指定是否只采用BIRT報表內(nèi)定的分頁設(shè)置。這個參數(shù)一般需要和__fittopage聯(lián)合使用。

          “__agentstyle”
          同web.xml中的HTML_ENABLE_AGENTSTYLE_ENGINE參數(shù)設(shè)置。

          ========================== 后臺Server端打印相關(guān)參數(shù) ==========================
          “__action”
          定義執(zhí)行的指令名稱。當(dāng)前只支持print指令,用于后臺服務(wù)器打印。

          “__printer”
          后臺打印機名稱。

          “__printer_copies”
          對應(yīng)打印機的打印份數(shù)參數(shù)。

          “__printer_collate”
          對應(yīng)打印機的雙面打印參數(shù)。

          “__printer_duplex”
          對應(yīng)打印機的duplex參數(shù)。

          “__printer_mode”
          對應(yīng)打印機的模式參數(shù)。是單色還是彩色。

          “__printer_pagesize”
          對應(yīng)打印機的紙型參數(shù)。比如A4。
          ===============================================================================

          ========================== JSP Tag相關(guān)參數(shù)  ===================================
          “__id”
          viewer的ID號,這個參數(shù)一般不常用,主要用于JSP Tag中,如在一個頁面插入兩個BIRT Viewer,而且預(yù)覽同一個報表文件,這時候因為在一個session下面,所以需要用不同的ID去生成單獨的document文件。不至于都生成同一個document文件上,從而引發(fā)沖突。

          “__pattern”
          在JSP Tag中用于指定要提交的Servlet Pattern名字,如frameset/output/run/preview等。主要用于采用parameter模式生成parameter dialog對話框時。

          “__target”
          可以指定提交到的窗口名稱。如_blank,_self等。

          “__nocache”
          指定是否會用到cache的報表參數(shù)值,這些cache的值一般保存在rptconfig文件里。在設(shè)計報表并預(yù)覽的時候,可以保存輸入的報表參數(shù)值。這個在runtime的時候不常用。
          ===============================================================================

          ========================== 報表參數(shù)相關(guān) ===================================
          “__isnull”
          指定當(dāng)前的報表參數(shù)為null值,后面是報表的參數(shù)名。

          “__islocale”
          指定當(dāng)前的報表參數(shù)值是和Locale/Format相關(guān)的,必須用特定的Locale/Format轉(zhuǎn)化參數(shù)值(從String轉(zhuǎn)化為Object)。格式為__islocale=paramName。

          “__isdisplay__”
          指定報表參數(shù)的displayText值,格式為__isdisplay__paramName=displayText。可以在報表中引用displayText值,如params[“p1”].displayText。
          在URL上傳displayText時如下(報表參數(shù)名為p1):
          &__isdisplay__p1=hello

          “__islocale__”
          指定該報表參數(shù)值是Locale/Format相關(guān)的,同時給定了參數(shù)值。格式為__islocale__paramName=paramValue。
          ===============================================================================

          ========================== Export Data參數(shù) ===================================
          “__exportEncoding”
          該參數(shù)應(yīng)用于導(dǎo)出數(shù)據(jù)為CSV中,可以指定導(dǎo)出的文件編碼,如GBK或是GB2312等。

          “__sep”
          該參數(shù)應(yīng)用于導(dǎo)出數(shù)據(jù)為CSV中,可以指定數(shù)據(jù)分隔符,如逗號,冒號等。

          “__exportdatatype”
          該參數(shù)應(yīng)用于導(dǎo)出數(shù)據(jù)為CSV中,可以指定是否輸出數(shù)據(jù)類型。true | false

          “ResultSetName”
          要導(dǎo)出數(shù)據(jù)的記錄集名字。

          “SelectedColumnNumber”
          要導(dǎo)出的欄位數(shù)。

          “SelectedColumn”
          要導(dǎo)出的數(shù)據(jù)欄位名稱。

          具體可以查看BirtSimpleExportDataDialog.js文件。
          ===============================================================================

          5. 其它參數(shù)設(shè)置
          在BIRT Viewer里還有一個比較特殊的參數(shù)應(yīng)用,就是用戶可以自定義自已的servlet,然后傳遞對象到Application Context中,在報表中就可以從全局的Application Context去獲取到這個對象。
          這里相關(guān)的有兩個內(nèi)定的參數(shù),AppContextKey和AppContextValue。下面是一個簡單的示例。
          public void service( HttpServletRequest request,
             HttpServletResponse response ) throws ServletException,
             IOException, BirtException
          {
            String myKeyName = "mykey";
            List values = new ArrayList();
            values.add( "hello" );
            values.add( new Date() );
            request.setAttribute( "AppContextKey", myKeyName );
            request.setAttribute( "AppContextValue", values );
            RequestDispatcher rd = request.getRequestDispatcher( "/frameset" );
            rd.include( request, response );
          }
          posted @ 2010-02-03 11:04 聰明的老虎 閱讀(6050) | 評論 (0)編輯 收藏

              要把birt2.5版本部署到tomcat6中
          1、去birt網(wǎng)站下載birt-runtime-2_5_1.zip。
          2、解壓birt-runtime-2_5_1.zip,把目錄下面的WebViewerExample復(fù)制到tomact的webapps\目錄下面
          3、在tomcat6中部署需要把commons-logging 拷貝到 webapps\WebViewerExample\WEB-INF\lib目錄下
          運行tomcat 以后,在瀏覽器中輸入 http://localhost:8080/WebViewerExample/
          就可以看到相關(guān)的列子。

          posted @ 2010-01-13 10:44 聰明的老虎 閱讀(444) | 評論 (0)編輯 收藏
              這幾天學(xué)習(xí)了下birt報表,birt是eclipse的一個插件,安裝起來非常簡單
          1、直接下載已經(jīng)包括birt插件的eclipse開發(fā)工具http://download.actuatechina.com/eclipse/technology/epp/downloads/release/galileo/SR1/eclipse-reporting-galileo-SR1-win32.zip
          2、 直接下載本身eclipse對應(yīng)版本的birt,下載以后直接拷貝到相關(guān)的插件目錄下就可以了。如果打開eclipse沒有發(fā)現(xiàn)birt,原因有可能就是版本對應(yīng)的錯誤。
          posted @ 2010-01-12 22:51 聰明的老虎 閱讀(376) | 評論 (0)編輯 收藏
          僅列出標(biāo)題  
          從現(xiàn)在開始

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          收藏夾

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 南投县| 新民市| 保康县| 高密市| 康马县| 绥化市| 东山县| 芦山县| 收藏| 友谊县| 镇平县| 博白县| 丰原市| 顺平县| 建德市| 嵊州市| 翼城县| 惠东县| 沅江市| 济宁市| 如皋市| 佳木斯市| 洛阳市| 方山县| 盈江县| 茌平县| 朝阳区| 绿春县| 隆回县| 揭阳市| 大安市| 霍城县| 九江县| 什邡市| 饶阳县| 扬中市| 安吉县| 永城市| 扶绥县| 迭部县| 巴马|