176142998

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            116 Posts :: 0 Stories :: 45 Comments :: 0 Trackbacks

          #

          window.opener 實際上就是通過window.open打開的窗體的父窗體。

          比如在父窗體parentForm里面 通過 window.open("subForm.html"),那么在subform.html中 window.opener

          就代表parentForm,可以通過這種方式設置父窗體的值或者調用js方法。

          如:1,window.opener.test(); ---調用父窗體中的test()方法

              2,如果window.opener存在,設置parentForm中stockBox的值。

              if (window.opener && !window.opener.closed) {

                 window.opener.document.parentForm.stockBox.value = symbol;

          }

          1>window.opener 的用法

          在一般的用法中,只是用來解決關閉窗口時不提示彈出窗口,   而對它更深層的了解一般比較少。其   實   window.opener是指調用window.open方法的窗口。
               在工作中主要是用來解決部分提交的。這種跨頁操作對工作是非常有幫助的。
          如果你在主窗口打開了一個頁面,并且希望主窗口刷新就用這個,打開頁面的window.opener就相當于
          主窗口的window。
          主窗口的刷新你可以用
          window.opener.location.reload();
          如果你用虛擬的目錄:如struts的*.do會提示你重試

          你可以改成這樣 window.opener.yourformname.submit()
          就好了

          2〉

          在應用中有這樣一個情況,
          在A窗口中打開B窗口,在B窗口中操作完以后關閉B窗口,同時自動刷新A窗口


          function closeWin(){
                   hasClosed = true;
                   window.opener.location="javascript:reloadPage();";
                   window.close();
               }
               function window.onbeforeunload(){
                   if(!hasClosed){
                       window.opener.location="javascript:reloadPage();";
                   }
               }

          </script>
          上面的代碼在關閉B窗口的時候會提示錯誤,說缺少Object,正確的代碼如下:
          function closeWin(){
                   hasClosed = true;
                   window.opener.location="javascript:reloadPage();";
                   window.opener=null;
                   window.close();
               }
               function window.onbeforeunload(){
                   if(!hasClosed){//如果已經執行了closeWin方法,則不執行本方法
                       window.opener.location="javascript:reloadPage();";
                   }
               }

          </script>
          reloadPage方法如下:
          function reloadPage() {
                   history.go(0);
                   document.execCommand("refresh")
                   document.location = document.location;
                   document.location.reload();
               }
          PS:由于需要支持正常關閉和強制關閉窗口時能捕捉到事件,用了全局變量hasClosed

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

          補充,在父窗口是frame的時候在刷新父窗口的時候會出現問題:

          The page cannot be refreshed without resending the information.
          后修改如下:
          window.opener.parent.document.frames.item('mainFrame').location.href = window.opener.location.href;
          不需要執行自帶的reload()方法,注意,不要再畫蛇添足加上這一句:

          window.opener.parent.document.frames.item('mainFrame').location.reload();

          ========================================================================================
          最后,為了同時支持刷新普通父窗口和frame父窗口,代碼如下:
          function closeWin() {
                   hasClosed = true;
               <%if(null != frame){%>
                   window.opener.parent.document.frames.item('mainFrame').location.href = window.opener.location.href;
               <%}else{%>
                   window.opener.location = "javascript:reloadPage();";
               <%}%>
                   //window.opener.top.mainFrame.location="javascript:reloadPage();";
                   //self.opener.frames.mainFrame.location.reload(true);
                   window.opener = null;
                   window.close();
               }
               function window.onbeforeunload(){
                   if (!hasClosed) {
                   <%if(null != frame){%>
                       window.opener.parent.document.frames.item('mainFrame').location.href = window.opener.location.href;
                   <%}else{%>
                       window.opener.location = "javascript:reloadPage();";
                   <%}%>
                       window.opener = null;
                   }
               }

          關于window.opener

          window.opener 的用法

              window.opener 返回的是創建當前窗口的那個窗口的引用,比如點擊了a.htm上的一個鏈接而打開了b.htm,然后我們打算在b.htm上輸入一個值然后賦予a.htm上的一個id為“name”的textbox中,就可以寫為:

              window.opener.document.getElementById("name").value = "輸入的數據";

              對于javascrīpt中的window.opener沒有很好的理解。

              為什么框架中不能使用,彈出窗口的父窗口不能在框架里面的某個頁面呢?那怎樣通過彈出窗口操作框架中的父窗口呢?

              opener.parent.frames['frameName'].document.all.input1.value 試試這個:)

          正確使用window.open返回對象的opener

           

          眾所周知JavaScript中:

          var win = window.open(url,windowName,...); 的使用,

          而win.opener則是指向父窗口的引用

          然而,有種情況卻比較特別,

          假如有兩個窗口window1和window2

          按下列步驟執行:

          var win = window.open(url,windowName,...);// (window1)

          var win = window.open(url,windowName,...);//(window2)

          其中先后這兩次打開的子窗口的windowName一樣

          此時你會發現在window2中的win.opener卻不是指向window2的,卻是指向window1.

          如果你想在子窗口關閉父窗口的話,就不正確了,因此可以修改上面的執行方法為:

          var win = window.open(url,windowName,...);? (window1)

          win.opener = window;

          var win = window.open(url,windowName,...);? (window2)

          win.opener = window;

          只有這樣修改才OK

           

           

           

          通過window.showModalDialog或者.showModelessDialog彈出的頁面

          這種情況需要兩個步驟:
          1 在父窗口.showModalDialog或.showModelessDialog方法的第二個參數傳遞window對象
          比如: window.showModelessDialog('a.htm',window);
          2 在a.htm中就可以通過window.dialogArguments獲取該參數
          比如: window.dialogArguments.fun1();
          PS:子窗口可以通過設置window.returnValue設置頁面返回值

          比如: window.returnValue=OK;window.close();

          strRtn=window.showModalDialog(......)

          這時,strRtn='ok'


          頁面中實現:
          父頁面
          function reloadPage() {
                   document.form1.submit();
               }
          彈出頁面調用closeWin();
          function closeWin(){
                   hasClosed = true;
                   window.opener.location="javascript:reloadPage();";
                   window.opener=null;
                   window.close();
               }
          posted @ 2008-08-05 16:05 飛飛 閱讀(494) | 評論 (1)編輯 收藏

          名稱 必填 缺省值 類型 描述
          emptyOption false false Boolean 是否在題頭選項后面添加一個空的(--)選項
          headerKey false   Object/String 設置列表的題頭主鍵值. 一定不能為空值! "'-1'"或"''"是正確的取值, ""是錯誤的取值.
          headerValue false   Object/String 列表的題頭選項值
          multiple false   Object/String 創建一個多選列表. 如果value屬性指定了一個數組(正確的元素類型), 那么將預先選中數組中指定的多個選項.
          size false   Integer 該組件列表框的大小 (顯示元素的個數)
          list true   Object/String 創建列表的可迭代數據源. 如果該列表是一個Map(key, value), 那么Map的主鍵將作為選項(<option>)的"value"屬性, 而該主鍵對應的值作為選項的文本內容.
          listKey false   Object/String 列表數據源中元素對象的屬性, 用于獲取選項的值
          listValue false   Object/String 列表數據源中元素對象的屬性, 用于獲取選項的文本內容
          theme false   Object/String 輸出元素時使用的主題(theme)(不使用缺省的)
          template false   Object/String 輸出元素時使用的模板(template)(不使用缺省的)
          cssClass false   Object/String 輸出元素時的class屬性
          cssStyle false   Object/String 輸出元素時的css樣式定義(譯者注:就是html元素的style屬性)
          title false   Object/String 在輸出元素時設置html屬性title
          disabled false   Object/String 在輸出元素時設置html屬性disabled
          label false   Object/String 用于輸出一個元素對應的label的表達式
          labelPosition false left Object/String 不贊成使用.
          labelposition false   Object/String 定義元素標簽的位置(top/left)
          requiredposition false   Object/String 定義required屬性輸出的位置(left|right)
          name false   Object/String 元素的名字
          required false false Boolean 如果設置為true, 在輸出標簽時將顯示出此字段是必須輸入的(譯者注:如果使用默認模板,將會標示為"*")
          tabindex false   Object/String 在輸出元素時設置html屬性tabindex
          value false   Object/String 預設input元素的value屬性.
          onclick false   Object/String 在輸出元素時設置html屬性onclick
          ondblclick false   Object/String 在輸出元素時設置html屬性ondblclick
          onmousedown false   Object/String 在輸出元素時設置html屬性onmousedown
          onmouseup false   Object/String 在輸出元素時設置html屬性onmouseup
          onmouseover false   Object/String 在輸出元素時設置html屬性onmouseover
          onmousemove false   Object/String 在輸出元素時設置html屬性onmousemove
          onmouseout false   Object/String 在輸出元素時設置html屬性onmouseout
          onfocus false   Object/String 在輸出元素時設置html屬性onfocus
          onblur false   Object/String 在輸出元素時設置html屬性onblur
          onkeypress false   Object/String 在輸出元素時設置html屬性onkeypress
          onkeydown false   Object/String 在輸出元素時設置html屬性onkeydown
          onkeyup false   Object/String 在輸出元素時設置html屬性onkeyup
          onselect false   Object/String 在輸出元素時設置html屬性onselect
          onchange false   Object/String 在輸出元素時設置html屬性onchange
          tooltip false   String 設置元素的tooltip屬性(譯者注:tooltip為工具欄提示)
          tooltipConfig false   String 設置tooltip屬性的配置
          id false   Object/String id是定位元素時使用的. 對于UI和表單標簽它會被用作HTML的id屬性
           1<ww:select label="Pets"
           2       name="petIds"
           3       list="petDao.pets"
           4       listKey="id"
           5       listValue="name"
           6       multiple="true"
           7       size="3"
           8       required="true"
           9/>
          10
          11<ww:select label="Months"
          12       name="months"
          13       headerKey="-1" headerValue="Select Month"
          14       list="#{'01':'Jan', '02':'Feb', []}"
          15       value="selectedMonth"
          16       required="true"
          17/>
          18
          posted @ 2008-08-04 20:21 飛飛 閱讀(365) | 評論 (0)編輯 收藏

          Struts2技術學習專題-IT168http://tech.it168.com/zt/struts2/index.html
          MLDN struts2專題:http://www.mldn.cn/topic/struts2/struts2.htm
          中國IT實驗室 : http://java.chinaitlab.com/List_213.html
          一個不錯的blog: http://www.aygfsteel.com/max/

          http://www.aygfsteel.com/max/category/16130.html

          Java學習http://www.java3z.com/cwbwebhome/type.jsp?type=struts

           

          Struts 2 相關文檔下載:
          struts2.0中文幫助手冊.chm

          posted @ 2008-08-04 15:17 飛飛 閱讀(234) | 評論 (0)編輯 收藏

          <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
          <%@ taglib uri="/struts-tags" prefix="s"%>
          <%
          String path = request.getContextPath();
          String basePath = request.getScheme() + "://"
              + request.getServerName() + ":" + request.getServerPort()
              + path + "/";
          %>

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
          <head>
             <base href="<%=basePath%>">

             <title>Struts 2 標簽之s:property的用法</title>

             <meta http-equiv="pragma" content="no-cache">
             <meta http-equiv="cache-control" content="no-cache">
             <meta http-equiv="expires" content="0">
             <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
             <meta http-equiv="description" content="This is my page">
             <!--
          <link rel="stylesheet" type="text/css" href="styles.css">
          -->

          </head>

          <body>
             <table border="1">
              <tr>
               <th>編號</th>
               <th>書名</th>
               <th>作者</th>
              </tr>
              <s:iterator value="#{'Spring 2.0':'李剛','Java':'張三','j2ee study':'李四'}" id="name" status="st">
               <tr <s:if test="#st.odd">style="background-color:#bbbbbb"</s:if> >
                <td><s:property value="#st.count"/></td>
                <td><s:property value="key"/></td>
                <td><s:property value="value"/></td>
               </tr>
              </s:iterator>
             </table>
          </body>
          </html>
          效果圖:

          posted @ 2008-08-04 15:15 飛飛 閱讀(319) | 評論 (0)編輯 收藏

          1 實現權限控制攔截器
          本示例應用要求用戶登陸,且必須為指定用戶名才可以查看系統中某個視圖資源;否則,系統直接轉入登陸頁面。對于上面的需求,可以在每個Action的執行實際處理邏輯之前,先執行權限檢查邏輯,但這種做法不利于代碼復用。因為大部分Action里的權限檢查代碼都大同小異,故將這些權限檢查的邏輯放在攔截器中進行將會更加優雅。

          檢查用戶是否登陸,通常都是通過跟蹤用戶的Session來完成的,通過ActionContext即可訪問到Session中的屬性,攔截器的intercepte(ActionInvocation invocation)方法的invocation參數可以很輕易地訪問到請求相關的ActionContext實例。
          權限檢查攔截器類的代碼如下:
          //權限檢查攔截器繼承AbstractInterceptor類
          public class AuthorityInterceptor extends AbstractInterceptor
          {
          //攔截Action處理的攔截方法
          public String intercept(ActionInvocation invocation) throws Exception
          {
          //取得請求相關的ActionContext實例
          ActionContext ctx = invocation.getInvocationContext();
          Map session = ctx.getSession();
          //取出名為user的Session屬性
          String user = (String)session.get("user");
          //如果沒有登陸,或者登陸所用的用戶名不是scott,都返回重新登陸
          if (user != null && user.equals("scott") )
          {
          return invocation.invoke();
          }
          //沒有登陸,將服務器提示設置成一個HttpServletRequest屬性
          ctx.put("tip" , "您還沒有登陸,請輸入scott,tiger登陸系統");
          //直接返回login的邏輯視圖
          return Action.LOGIN;
          }
          }
          上面攔截器代碼非常簡單,先通過ActionInvocation參數取得用戶的Session實例的引用,然后從中取出user屬性,通過判斷該屬性值來確定用戶是否登陸系統,從而判斷是否需要轉入登陸頁面。

          2 配置權限控制攔截器
          一旦實現了上面的權限檢查攔截器,就可以在所有需要實現權限控制的Action中復用上面的攔截器。
          為了使用該攔截器,首先在struts.xml文件中定義該攔截器,定義攔截器的配置片段如下:
          <!-- 用戶攔截器定義在該元素下 -->
          <interceptors>
          <!-- 定義了一個名為authority的攔截器 -->
          <interceptor name="authority" class="lee.AuthorityInterceptor"/>
          </interceptors>
          定義了該攔截器之后,可以在Action中應用該攔截器,應用該攔截器的配置片段如下:
          <!-- 定義一個名為viewBook的Action,其實現類為ActionSupport -->
          <action name="viewBook">
          <!-- 返回success視圖名時,轉入/WEB-INF/jsp/viewBook.jsp頁面 -->
          <result>/WEB-INF/jsp/viewBook.jsp</result>
          <!-- 攔截器一般配置在result元素之后! -->
          <interceptor-ref name="defaultStack"/>
          <!-- 應用自定義攔截器 -->
          <interceptor-ref name="authority"/>
          </action>

          上面名為viewBook的Action,沒有指定class屬性,默認使用ActionSupport類,配置該Action時,只是指定了一個Result,指定返回success字符串時,系統將轉入/WEB-INF/jsp/viewBook.jsp頁面。但并為未配置login視圖對應的JSP頁面。
          考慮到這個攔截器的重復使用,可能在多個Action都需要跳轉到login邏輯試圖,故將login Result定義成一個全局Result。下面是配置login Result的配置片段:
          <!-- 定義全局Result -->
          <global-results>
          <!-- 當返回login視圖名時,轉入/login.jsp頁面 -->
          <result name="login">/login.jsp</result>
          </global-results>

          經過上面的配置,如果瀏覽者在瀏覽器中直接發送viewBook請求,將會轉入如圖所示的頁面。
          這種通過攔截器進行權限控制的方式,顯然具有更好的代碼復用。
          如果為了簡化struts.xml文件的配置,避免在每個Action中重復配置該攔截器,可以將該攔截器配置成一個默認攔截器棧(這個默認攔截器棧應該包括default-stack攔截器棧和權限檢查攔截器)。
          定義自己的默認攔截器棧的配置片段如下:
          <interceptors>
          <!-- 定義權限檢查攔截器 -->
          <interceptor name="authority" class="lee.AuthorityInterceptor"/>
          <!-- 定義一個包含權限檢查的攔截器棧 -->
          <interceptor-stack name="mydefault">
          <!-- 定義攔截器棧包含default-stack攔截器棧 -->
          <interceptor-ref name="default-stack"/>
          <!-- 定義攔截器棧包含authority攔截器 -->
          <interceptor-ref name=" authority"/>
          </interceptor- stack >
          </interceptors>

          一旦定義了上面的mydefault攔截器棧,這個攔截器棧包含了權限檢查攔截器和系統默認的攔截器棧。如果將這個攔截器棧定義成默認攔截器,則可以避免在每個Action需要重復定義權限檢查攔截器。
          下面是定義默認攔截器的配置片段:
          <default-interceptor-ref name="mydefault"/>
          一旦在某個包下定義了上面的默認攔截器棧,在該包下的所有Action都會自動增加權限檢查功能。對于那些不需要使用權限控制的Action,將它們定義在另外的包中——這個包中依然使用系統原來的默認攔截器棧,將不會有權限控制功能。
          posted @ 2008-08-04 15:06 飛飛 閱讀(1353) | 評論 (1)編輯 收藏

           在struts2中,提供了日期控件,以方便地選擇日期和時間,這是通過 標簽來實現的。該日期控件是通過DOJO來實現的,會在客戶端生成一段JS代碼,所以,要讓該日期控件生效,需要加入以下代碼:   
          代碼
          1. <s:head theme="ajax" />

              這樣,就可以在頁面中使用 標簽了。如:

          代碼
          <s:datetimepicker name="todayDate" value="2007-8-9" label="Format (yyyy-MM-dd)" displayFormat="yyyy-MM-dd"/>

              在頁面中,就會顯示出日期控件,其中displayFormat是要顯示的日期格式。效果如下所示:

           

          posted @ 2008-08-04 14:52 飛飛 閱讀(587) | 評論 (0)編輯 收藏

          代碼:

          <%@ page language="java" pageEncoding="UTF-8"%>
          <%@ taglib prefix="s" uri="/struts-tags"%>
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
          <head>
             <title>s:tree的使用</title>
             <s:head theme="ajax"/>
          </head>

          <body>
          <H3>s:tree的使用</H3>
             <s:tree label="計算機圖書" theme="ajax" id="book" showGrid="true"
              showRootGrid="true" treeSelectedTopic="tree selected">
              <s:treenode theme="ajax" label="李剛" id="ligang">
               <s:treenode theme="ajax" label="Jsp study" id="jsp"></s:treenode>
               <s:treenode theme="ajax" label="java study" id="java"></s:treenode>
               <s:treenode theme="ajax" label="php study" id="php"></s:treenode>
              </s:treenode>
              <s:treenode theme="ajax" label="張三" id="zhangsan">
               <s:treenode theme="ajax" label="test study" id="test1"></s:treenode>
               <s:treenode theme="ajax" label="test study" id="test2"></s:treenode>
               <s:treenode theme="ajax" label="test study" id="test3"></s:treenode>
              </s:treenode>
              <s:treenode theme="ajax" label="李四" id="lisi">
               <s:treenode theme="ajax" label="Jsp study" id="test4"></s:treenode>
               <s:treenode theme="ajax" label="java study" id="test5"></s:treenode>
               <s:treenode theme="ajax" label="php study" id="test6"></s:treenode>
              </s:treenode>
             </s:tree>

          </body>
          </html>

          posted @ 2008-08-04 14:47 飛飛 閱讀(321) | 評論 (0)編輯 收藏

               摘要: 一: 首先是在自動生成的DAO里面加上如下代碼  public List findAll()...{                  String sql="FROM Au...  閱讀全文
          posted @ 2008-08-04 14:22 飛飛 閱讀(1280) | 評論 (0)編輯 收藏

               摘要: Struts2提供了大量豐富的標簽供使用,它不再像Struts1中一樣,將種類標簽進行分門列別,但可以根據其使用的用途用以區別。本文通過對Struts2中數據標簽的學習,來對Struts2中標簽的學習起到一個拋磚引玉的作用。文中將介紹Action標簽、Bean標簽、Data標簽、Include標簽、Param標簽、Set標簽、Text標簽、Property標簽等標簽。 一、<s:actio...  閱讀全文
          posted @ 2008-08-04 10:58 飛飛 閱讀(374) | 評論 (1)編輯 收藏

          1、sturts2的標簽很豐富。用起來也很方便,但是它的樣式不太好,最好能夠自定義一套樣式!若不想用sturts2
             缺省的樣式,就使用theme="simple"。
             sturts2中的有些標簽,是用js框架寫的,需要加載這些框架(如:dojo)。在jsp頁面中使用<s:head/>加載這些框架和css!
            
           2、sturts2中的國際化,又其攔截器完成。攔截器會根據用戶瀏覽器設置的不同來,自動適配!只需要定義多個資源文件
             就可以!
             資源文件可以是全局的(在classes中),也可以是局部的(在各個特定的包中)!
             對資源文件的要求:
               要注意資源文件的命名規范!例如:package_en_US.properties和package_zh_CN.properties
               
             I、兩種實現國際化的方法,key和lable方式!
               例如:
                a、<s:textfield label="%{getText('username')}" name="username"/>
                b、<s:textfield key="username" name="username"/>
              
              II、單個的資源信息提取的兩種方式:
               例如:
                a、<s:property value="getText('main.message')"/>
                b、<s:text name="main.message"/>
               
             III、在s:datetimepicker標簽中可以使用,key和label兩種方式來進行國際化
                    key="date"
                    label="%{getText('date')}"
                    這個日期標簽,在中文環境和英文環境下的顯示形式是不一樣的
                    中文:2007-11-12
                    英文:11/14/2007
                    所以在進行日期處理的時候要小心
               
           3、對于分步表單提交和“后退”網頁過期的問題有待繼續研究!
             對于表單重復提交的問題可以使用<s:token/>來解決!
             在使用token時,需要配置攔截器,而且在Action中需要定一個常量!
             例如:
               頁面:<s:token/>
               xml: <interceptor-ref name="defaultStack" />
                        <interceptor-ref name="token" />
               Action:private static final long serialVersionUID = 6820659617470261780L;
            
           4、個人感覺struts2的Validation(驗證框架)不是很好,效率也不高,而且需要定義比較復雜的XXXAction-validation.xml文件.
               所以對于頁面上的限制還是使用js或js框架(如:jquery,dojo,portaltype)!
               
           5、<s:submit key="back" name="redirect-action:crud!list" />這種實現方式比較好!
             <s:submit key="back" onclick="#:history.back();" />
             這種實現方式不好,因為它會自動刷新頁面;當有添加,刪除,更新操作時,就重復的刷新頁面!不推薦使用!
            
           6、<s:select label="%{getText('user.from')}"  
               name="user.from"
               headerKey=""
               headerValue="Select From"
               list="fromArray"
               listKey="id"
               listValue="name"
               value="user.from"
               required="true" />
               <%--
                  name="user.from"是用于通過struts2內在的機制給Action自動賦值
                  list="fromArray"是一個封裝了bean的list,其中的bean 有id和name屬性
                  listKey="id"
                  listValue="name"
                  那么,當用戶提交表單的時候,sturts2的內在機制,會自動為我們裝載的!
                  需要我們在Action里定義一個user bean,其中user中有一個from屬性
                  要是嵌套定義,如:user bean 中又定義了一個bean(DateBean)。那么在頁面就要使用user.date.year這種形式,來向Action傳值!
                  其中,date是user bean 中的一個屬性,struts2會自動為你裝載!
               --%>
          posted @ 2008-08-04 09:38 飛飛 閱讀(662) | 評論 (0)編輯 收藏

          僅列出標題
          共12頁: First 上一頁 2 3 4 5 6 7 8 9 10 下一頁 Last 
          主站蜘蛛池模板: 永定县| 辽中县| 简阳市| 定南县| 涿州市| 张家港市| 陕西省| 阿图什市| 闻喜县| 鄂托克前旗| 拜泉县| 大余县| 孟村| 石屏县| 新干县| 太原市| 丰都县| 郎溪县| 哈密市| 江都市| 鄄城县| 怀来县| 韶关市| 阿勒泰市| 信丰县| 田林县| 金平| 中宁县| 延吉市| 宝兴县| 独山县| 临夏县| 视频| 莫力| 平凉市| 淅川县| 滁州市| 安图县| 伽师县| 大方县| 武夷山市|