www.久久热,福利片在线观看,最新精品国产http://www.aygfsteel.com/yuxh/category/47628.htmlwayzh-cnTue, 28 Jul 2015 18:07:06 GMTTue, 28 Jul 2015 18:07:06 GMT60appfuse3.5打印Hibernate sql參數http://www.aygfsteel.com/yuxh/archive/2015/07/22/426376.htmlyuxhyuxhWed, 22 Jul 2015 06:11:00 GMThttp://www.aygfsteel.com/yuxh/archive/2015/07/22/426376.htmlhttp://www.aygfsteel.com/yuxh/comments/426376.htmlhttp://www.aygfsteel.com/yuxh/archive/2015/07/22/426376.html#Feedback0http://www.aygfsteel.com/yuxh/comments/commentRss/426376.htmlhttp://www.aygfsteel.com/yuxh/services/trackbacks/426376.htmlappfuse3.5使用Hibernate4.3.6, 而Hibernate日志框架使用了jboss-logging,想在后臺打出sql的參數一直無法生效。
檢查配置文件,框架里面的兩個配置文件,src/test/resources/log4j2.xml(單元測試時配置),src/main/resources/log4j2.xml(運行時配置)
搞清log4j2的配置后,各種修改(主要是
  <Logger name="org.hibernate.SQL" level="trace"/>
  <Logger name="org.hibernate.type" level="trace"/>)
用junit測試任然無法打印出真實參數。根據這些實踐,確定log4j2是使用無誤生效的,只是org.hibernate這部分的logger一直未起效
參考國內外網站,一直無人回答hibernate4的這個問題,有人指出這部分Hibernate官方文檔只是提了一句,一直未更新相關內容。最后有人提到應該是 jboss-logging 的LoggerProviders這個類的問題,看實現對log4j2已經做支持。最后發現 jboss-logging使用的是3.2.0.beta,對比相關類的源代碼,更改為3.2.0.Final,生效!

P.S 把這個問題提交給Appfuse官網,issue APF-1478,作者標志為4.0版本修復。


yuxh 2015-07-22 14:11 發表評論
]]>
Eclipse中項目maven依賴庫錯誤http://www.aygfsteel.com/yuxh/archive/2015/06/02/425441.htmlyuxhyuxhTue, 02 Jun 2015 02:27:00 GMThttp://www.aygfsteel.com/yuxh/archive/2015/06/02/425441.htmlhttp://www.aygfsteel.com/yuxh/comments/425441.htmlhttp://www.aygfsteel.com/yuxh/archive/2015/06/02/425441.html#Feedback0http://www.aygfsteel.com/yuxh/comments/commentRss/425441.htmlhttp://www.aygfsteel.com/yuxh/services/trackbacks/425441.htmlJAVA_HOME沒有正確傳遞),查看到eclipse默認的是安裝的jre目錄,修改到jdk目錄下,依賴問題解決。
不過目前版本仍然沒有解決pom文件的“Plugin execution not covered by lifecycle configuration”錯誤,暫時忽略不管吧。

yuxh 2015-06-02 10:27 發表評論
]]>
JAVA調用重寫的祖父方法http://www.aygfsteel.com/yuxh/archive/2012/05/31/379647.htmlyuxhyuxhThu, 31 May 2012 03:23:00 GMThttp://www.aygfsteel.com/yuxh/archive/2012/05/31/379647.htmlhttp://www.aygfsteel.com/yuxh/comments/379647.htmlhttp://www.aygfsteel.com/yuxh/archive/2012/05/31/379647.html#Feedback0http://www.aygfsteel.com/yuxh/comments/commentRss/379647.htmlhttp://www.aygfsteel.com/yuxh/services/trackbacks/379647.html在Son類里面寫一個test方法:
public void test() {
 
super.test();
 
this.test();
}
反編譯之后:
public void test()
    {
    
//    0    0:aload_0         
    
//    1    1:invokespecial   #2   <Method void Parent.test()>
    
//    2    4:aload_0         
    
//    3    5:invokevirtual   #3   <Method void test()>
    
//    4    8:return          
    }
使用ASM可以完成對GrandParent方法的調用
public class GrandParent {
    
public void test() {
            System.out.println(
"test of GrandParent");
    }
}

public class Parent extends GrandParent{
    
public void test() {
        System.out.println(
"test of Parent");
    }
}

public class Son extends Parent{
    
public void test() {
        System.out.println(
"test of Son");
    }
}
調用Son實例的test方法只會執行Son的test方法。而ASM可以修改class,先寫一個Example類繼承Son,重寫test方法

 1 import java.io.FileOutputStream;
 2  
 3 import org.objectweb.asm.ClassWriter;
 4 import org.objectweb.asm.MethodVisitor;
 5 import org.objectweb.asm.Opcodes;
 6  
 7 public class ASMByteCodeManipulation extends ClassLoader implements Opcodes {
 8  
 9  public static void main(String args[]) throws Exception {
10   ClassWriter cw = new ClassWriter(0);
11   cw.visit(V1_1, ACC_PUBLIC, "Example"null"Son"null);
12  
13   // creates a MethodWriter for the (implicit) constructor
14   MethodVisitor mw = cw.visitMethod(ACC_PUBLIC, "<init>""()V"null,null);
15   mw.visitVarInsn(ALOAD, 0);
16   mw.visitMethodInsn(INVOKESPECIAL, "Son""<init>""()V");
17   mw.visitInsn(RETURN);
18   mw.visitMaxs(11);
19   mw.visitEnd();
20  
21   // creates a MethodWriter for the 'test' method
22   mw = cw.visitMethod(ACC_PUBLIC, "test""()V"nullnull);
23   mw.visitFieldInsn(GETSTATIC, "java/lang/System""out","Ljava/io/PrintStream;");
24   mw.visitLdcInsn("test of AI3");
25   mw.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream""println",
26     "(Ljava/lang/String;)V");
27   //Call test() of GrandParent
28   mw.visitVarInsn(ALOAD, 0);
29   mw.visitMethodInsn(INVOKESPECIAL, "GrandParent""test""()V");
30   //Call test() of GrandParent
31   mw.visitVarInsn(ALOAD, 0);
32   mw.visitMethodInsn(INVOKESPECIAL, "Parent""test""()V");
33   //Call test() of GrandParent
34   mw.visitVarInsn(ALOAD, 0);
35   mw.visitMethodInsn(INVOKESPECIAL, "Son""test""()V");
36   mw.visitInsn(RETURN);
37   mw.visitMaxs(21);
38   mw.visitEnd();
39  
40   byte[] code = cw.toByteArray();
41   FileOutputStream fos = new FileOutputStream("Example.class");
42   fos.write(code);
43   fos.close();
44  
45   ASMByteCodeManipulation loader = new ASMByteCodeManipulation();
46   Class<?> exampleClass = loader.defineClass("Example", code, 0,
47     code.length);
48   Object obj = exampleClass.newInstance();
49   exampleClass.getMethod("test"null).invoke(obj, null);
50  
51  }
52 }
輸出:
test of AI3
test of GrandParent
test of Parent
test of Son
看看怎樣實現的,11行定義一個新的類Example繼承Son。22行,Example重寫test方法,先打印“test of AI3”,再分別在29、32、35行調用GrandParent、Parent、Son的test方法。
 main方法中,45行創建Example的實例,再用反射調他的test方法。
使用invokespecial這種方式也有局限,只能從子類調用。否則報錯:
Exception in thread "main" java.lang.VerifyError: (class: Example, method: test1 signature: (LAI2;)V) Illegal use of nonvirtual function call


yuxh 2012-05-31 11:23 發表評論
]]>
Builder模式http://www.aygfsteel.com/yuxh/archive/2012/05/30/379576.htmlyuxhyuxhWed, 30 May 2012 09:44:00 GMThttp://www.aygfsteel.com/yuxh/archive/2012/05/30/379576.htmlhttp://www.aygfsteel.com/yuxh/comments/379576.htmlhttp://www.aygfsteel.com/yuxh/archive/2012/05/30/379576.html#Feedback0http://www.aygfsteel.com/yuxh/comments/commentRss/379576.htmlhttp://www.aygfsteel.com/yuxh/services/trackbacks/379576.htmltelescoping constructor)。這種方案的問題是,當構建對象的時候很容易把其中兩個參數的位置放反。。。。(難發現的bug)
另一種解決方案是JavaBean 模式,先調用無參構造函數再調用各個set方法來組裝對象。這種方案的問題是不能強制一致性。如果沒有set某些必須的參數的話,對象可能處于不一致(
inconsistent)的狀態(難發現的bug)。另外一個缺點是JavaBean模式不能讓類immutable,需要程序員額外工作保證線程安全。
第三種方式就是Builder設計模式。這種方式混合了telescoping constructor模式的安全性和JavaBean模式的可讀性。客戶端調用有所有必填參數的構造器(或靜態工廠),得到一個builder對象。然后調用builder對象的方法去set各個選填參數。最后調用無參的build方法產生一個immutable的對象實例。immutable對象有非常多優點而且可能很有用。builder的set方法都是返回builder本身,所以調用也是可以chained。如:
  GoogleCredential credentialNew = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
                    .setJsonFactory(JSON_FACTORY).setClientSecrets(clientSecrets)
                    .addRefreshListener(
new CredentialStoreRefreshListener(userID, new DBCredentialStore())).build()
                    .setAccessToken(accessToken).setRefreshToken(refreshToken)
客戶端代碼很好寫,更重要的是易讀。Builder模式模擬了在Ada和Python語言里的命名可選參數(named optional parameters)。
同時Builder類設置為static也是對Item 22:Favor static member classes over nonstatic的實踐


yuxh 2012-05-30 17:44 發表評論
]]>
Google Calendar v3授權傳參數http://www.aygfsteel.com/yuxh/archive/2012/05/08/377592.htmlyuxhyuxhTue, 08 May 2012 03:40:00 GMThttp://www.aygfsteel.com/yuxh/archive/2012/05/08/377592.htmlhttp://www.aygfsteel.com/yuxh/comments/377592.htmlhttp://www.aygfsteel.com/yuxh/archive/2012/05/08/377592.html#Feedback0http://www.aygfsteel.com/yuxh/comments/commentRss/377592.htmlhttp://www.aygfsteel.com/yuxh/services/trackbacks/377592.html一 基本流程
使用Google Calendar v3 ,如果以servlet作為代理,可以使用官方示例,自己寫一個類A.java繼承AbstractAuthorizationCodeServlet類,這個類主要用于跳轉到google提供的授權頁面,如果用戶同意授權,則根據A類中的URL(這個必須和注冊的google 回調路徑相同,比如oauth_callback否則報錯)重定向到B類,B.java 繼承AbstractAuthorizationCodeCallbackServlet類,這個訪問路徑類似http://www.example.com/oauth_callback?code=ABC1234。這里我配置oauth_callback為servlet的訪問路徑,B類中的
onSuccess方法將根據獲得的access Token(這是根據傳過來的code獲得的)做業務操作。

二 需要參數的情況
有些業務需要用戶傳參數,直接傳參數給A,再試圖在B中獲取是不行的!B類中只能獲取某些固定的參數,如code。要想傳用戶參數,我們可以在A中先獲取,把幾個參數組裝為json格式字符串(還可以繼續base64編碼),把這個字符串作為state的值,再重定向到授權頁面,同意后state參數可以傳到B類,取值解析json字符串(或先base64解碼),得到參數。
由于API中AuthorizationCodeRequestUrl有處理state的方法,而AbstractAuthorizationCodeServlet已經直接封裝,為了使用setState,直接在A類中繼承HttpServlet重寫service方法,復制大部分AbstractAuthorizationCodeServlet的內容,稍作修改:
resp.sendRedirect(flow.newAuthorizationUrl().setState(json).setRedirectUri(redirectUri).build());

三 關于refresh token
默認情況下,用戶授權之后token會有一個小時的有效期,之后你可以通過refresh token再重新獲取token。所以,如果不需要用戶再次授權,可以在第一次,保存好token、refresh token、ExpirationTime。實例中用了JDO來實現,自己如果使用數據庫保存,可類似寫一個類實現CredentialStore類。使用的時候,現在數據庫中取出,再創建credential,如:
            GoogleCredential credentialNew = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
                    .setJsonFactory(JSON_FACTORY).setClientSecrets(clientSecrets)
                    .addRefreshListener(new CredentialStoreRefreshListener(userID, new DBCredentialStore())).build()
                    .setAccessToken(accessToken).setRefreshToken(refreshToken)
                    .setExpirationTimeMilliseconds(expirationTimeMilliseconds);
在無效的情況下,Listener會自動去用refresh token請求。


yuxh 2012-05-08 11:40 發表評論
]]>
GSON簡單處理JSONhttp://www.aygfsteel.com/yuxh/archive/2012/05/08/377588.htmlyuxhyuxhTue, 08 May 2012 02:23:00 GMThttp://www.aygfsteel.com/yuxh/archive/2012/05/08/377588.htmlhttp://www.aygfsteel.com/yuxh/comments/377588.htmlhttp://www.aygfsteel.com/yuxh/archive/2012/05/08/377588.html#Feedback0http://www.aygfsteel.com/yuxh/comments/commentRss/377588.htmlhttp://www.aygfsteel.com/yuxh/services/trackbacks/377588.html以字符串為例介紹:
1 。構造json 字符串
  例如要傳送json格式的字符串
        String appID = req.getParameter("appID");
        String userID  = req.getParameter("userID");
        Map map = new HashMap();
        map.put("appID", appID);
        map.put("userID", userID);
        Gson gson = new Gson();
        String state = gson.toJson(map);
2.解析json字符串
          JsonParser jsonparer = new JsonParser();//初始化解析json格式的對象
          String state = req.getParameter("state");
          String appID = jsonparer.parse(state).getAsJsonObject().get("appID").getAsString();
          String userID = jsonparer.parse(state).getAsJsonObject().get("userID").getAsString();


yuxh 2012-05-08 10:23 發表評論
]]>
Java時區處理http://www.aygfsteel.com/yuxh/archive/2012/03/15/371982.htmlyuxhyuxhThu, 15 Mar 2012 15:08:00 GMThttp://www.aygfsteel.com/yuxh/archive/2012/03/15/371982.htmlhttp://www.aygfsteel.com/yuxh/comments/371982.htmlhttp://www.aygfsteel.com/yuxh/archive/2012/03/15/371982.html#Feedback0http://www.aygfsteel.com/yuxh/comments/commentRss/371982.htmlhttp://www.aygfsteel.com/yuxh/services/trackbacks/371982.html
通用協調時(UTC, Universal Time Coordinated),格林尼治平均時(GMT, Greenwich Mean Time) 由于歷史原因,這兩個時間是一樣的。
北京時區是東八區,領先UTC八個小時,在電子郵件信頭的Date域記為+0800。
轉換中,最重要的公式就是:
UTC + 時區差 = 本地時間
    public static Calendar convertToGmt(Calendar cal) {
        Date date 
= cal.getTime();
        TimeZone tz 
= cal.getTimeZone();

        System.out.println(
"input calendar has date [" + date + "]");

        
// Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT
        long msFromEpochGmt = date.getTime();

        
// gives you the current offset in ms from GMT at the current date
        int offsetFromUTC = tz.getOffset(msFromEpochGmt);
        System.out.println(
"offset is " + offsetFromUTC);

        
// create a new calendar in GMT timezone, set to this date and add the offset     
        Calendar gmtCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
        Calendar utcCal 
= Calendar.getInstance(TimeZone.getTimeZone("UTC"));

        gmtCal.setTime(date);
        //根據東西時區,選擇offsetFromUTC為正或負數
        gmtCal.add(Calendar.MILLISECOND, offsetFromUTC);

        utcCal.setTime(date);
        utcCal.add(Calendar.MILLISECOND, offsetFromUTC);

        System.out.println(
"Created GMT cal with date [" + gmtCal.getTime()
                
+ "==" + utcCal.getTime() + "]");
        
return gmtCal;
    }


yuxh 2012-03-15 23:08 發表評論
]]>
Andriod webview實現文件上傳http://www.aygfsteel.com/yuxh/archive/2012/03/12/371715.htmlyuxhyuxhMon, 12 Mar 2012 04:54:00 GMThttp://www.aygfsteel.com/yuxh/archive/2012/03/12/371715.htmlhttp://www.aygfsteel.com/yuxh/comments/371715.htmlhttp://www.aygfsteel.com/yuxh/archive/2012/03/12/371715.html#Feedback1http://www.aygfsteel.com/yuxh/comments/commentRss/371715.htmlhttp://www.aygfsteel.com/yuxh/services/trackbacks/371715.html
Andriod 到3.2版本為止,webview方式下使用<input type="file" />點擊后都沒有反應。實際上頂層是有隱含的接口沒實現的,可以自己重寫這個方法來實現。以phonegap為例:

public class App extends DroidGap {
    
private ValueCallback<Uri> mUploadMessage;
    
private final static int FILECHOOSER_RESULTCODE = 1;

    
/** Called when the activity is first created. */
    @Override
    
public void onCreate(Bundle savedInstanceState) {
        
super.onCreate(savedInstanceState);
        
super.init();
        
// WebView wv = new WebView(this);
        
// wv.setWebViewClient(new WebViewClient());
        this.appView.setWebChromeClient(new CordovaChromeClient(App.this) {
            
// For Android 3.0+
            public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {
                mUploadMessage 
= uploadMsg;
                Intent i 
= new Intent(Intent.ACTION_GET_CONTENT);
                i.addCategory(Intent.CATEGORY_OPENABLE);
                i.setType(
"image/*");
                App.
this.startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE);
            }

            
// The undocumented magic method override
            
// Eclipse will swear at you if you try to put @Override here
            public void openFileChooser(ValueCallback<Uri> uploadMsg) {
                mUploadMessage 
= uploadMsg;
                Intent i 
= new Intent(Intent.ACTION_GET_CONTENT);
                i.addCategory(Intent.CATEGORY_OPENABLE);
                i.setType(
"image/*");
                App.
this.startActivityForResult(Intent.createChooser(i, "File Chooser"), App.FILECHOOSER_RESULTCODE);
            }
        });

        
// setContentView(wv);
        super.loadUrl("file:///android_asset/www/login.html");
    }

    @Override
    
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        
if (requestCode == FILECHOOSER_RESULTCODE) {
            
if (null == mUploadMessage)
                
return;
            Uri result 
= intent == null || resultCode != RESULT_OK ? null : intent.getData();
            mUploadMessage.onReceiveValue(result);
            mUploadMessage 
= null;
        }
    }
}
如果直接的webview方式,extends WebChromeClient即可。 參考:http://stackoverflow.com/questions/5907369/file-upload-in-webview

yuxh 2012-03-12 12:54 發表評論
]]>
簡單google weather調用(jsp實現)http://www.aygfsteel.com/yuxh/archive/2012/02/22/370477.htmlyuxhyuxhWed, 22 Feb 2012 00:58:00 GMThttp://www.aygfsteel.com/yuxh/archive/2012/02/22/370477.htmlhttp://www.aygfsteel.com/yuxh/comments/370477.htmlhttp://www.aygfsteel.com/yuxh/archive/2012/02/22/370477.html#Feedback0http://www.aygfsteel.com/yuxh/comments/commentRss/370477.htmlhttp://www.aygfsteel.com/yuxh/services/trackbacks/370477.html
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.net.*"%>
<%
    StringBuffer sbf 
= new StringBuffer();
    
//Access the page
    try {
      
//如果網絡設置了代理
        System.setProperty("http.proxyHost""xxx");
        System.setProperty(
"http.proxyPort""80");
        URL url 
= new URL("http://www.google.com/ig/api?weather=london");
        URLConnection urlConn 
= url.openConnection();

        BufferedReader in 
= new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
        String inputLine;
        
while ((inputLine = in.readLine()) != null)
            sbf.append(inputLine);
        in.close();
        System.out.println(
"last="+sbf.toString());
    } 
catch (MalformedURLException e) {
        System.out.println(
"MalformedURLException"+e);
    } 
catch (IOException e) {
        System.out.println(
"IOException"+e);
    }
%><%=sbf.toString()%>
前臺js部分:

        var childData   = function(selector, arg)
        {
                
return selector.find(arg).attr('data');
         }
        $.ajax({
            type : 
"GET",
            data : 
"where=" ,
            url : 
"weather.jsp",
            success : 
function(data) {
                console.debug('data
='+data);
                forecast 
= $(data).find('forecast_information');
                cCondition 
= $(data).find('current_conditions');

                city 
= childData(forecast, 'city');
                
if (city != undefined) {
                    date 
= childData(forecast, 'forecast_date');

                    condition 
= childData(cCondition, 'condition');
                    tempC 
= childData(cCondition, 'temp_c');
                    humidity 
= childData(cCondition, 'humidity');
                    icon 
= childData(cCondition, 'icon');
                    $('#city').text(city);
                    $('#date').text(date);
                    $('#condition').text(condition);
                    $('#tempC').html(tempC 
+ '&deg; C');
                    $('#humidity').text(humidity);
                    $('#icon').attr({
                        'src' : 'http:
//www.google.com' + icon
                    });
                    $('#data').stop().show('fast');
                } 
else {
                    $('#error').stop().show('fast');
                }
            }
        });


yuxh 2012-02-22 08:58 發表評論
]]>
區分getPath(), getAbsolutePath(), getCanonicalPath()http://www.aygfsteel.com/yuxh/archive/2011/06/24/352951.htmlyuxhyuxhFri, 24 Jun 2011 05:42:00 GMThttp://www.aygfsteel.com/yuxh/archive/2011/06/24/352951.htmlhttp://www.aygfsteel.com/yuxh/comments/352951.htmlhttp://www.aygfsteel.com/yuxh/archive/2011/06/24/352951.html#Feedback0http://www.aygfsteel.com/yuxh/comments/commentRss/352951.htmlhttp://www.aygfsteel.com/yuxh/services/trackbacks/352951.html

來自

http://stackoverflow.com/questions/1099300/whats-the-difference-between-getpath-getabsolutepath-and-getcanonicalpath

C:\temp\file.txt" - this is a path, an absolute path, a canonical path

.\file.txt This is a path, It's not an absolute path nor canonical path.

C:\temp\myapp\bin\..\\..\file.txt This is a path, and an absolute path, it's not a canonical path

Canonical path is always an absolute path.

Converting from a path to a canonical path makes it absolute (通常會處理改變當前目錄,所以像. ./file.txt 變為c:/temp/file.txt). The canonical path of a file just "purifies" the path, 去除和解析類似“ ..\” and resolving symlinks(on unixes)

In short:

  • getPath() gets the path string that the File object was constructed with, and it may be relative current directory.
  • getAbsolutePath() gets the path string after resolving it against the current directory if it's relative, resulting in a fully qualified path.
  • getCanonicalPath() gets the path string after resolving any relative path against current directory, and removes any relative pathing (. and ..), and any file system links to return a path which the file system considers the canonical means to reference the file system object to which it points.

Also, each of this has a File equivalent which returns the corresponding File object.

The best way I have found to get a feel for things like this is to try them out:

import java.io.File;
public class PathTesting {
        public static void main(String [] args) {
                File f = new File("test/.././file.txt");
                System.out.println(f.getPath());
                System.out.println(f.getAbsolutePath());
                try {
                        System.out.println(f.getCanonicalPath());
                }
                catch(Exception e) {}
        }
}

Your output will be something like:

test\..\.\file.txt
C:\projects\sandbox\trunk\test\..\.\file.txt
C:\projects\sandbox\trunk\file.txt

So, getPath() gives you the path based on the File object, which may or may not be relative; getAbsolutePath() gives you an absolute path to the file; and getCanonicalPath() gives you the unique absolute path to the file. Notice that there are a huge number of absolute paths that point to the same file, but only one canonical path.

When to use each? Depends on what you're trying to accomplish, but if you were trying to see if two Files are pointing at the same file on disk, you could compare their canonical paths.


yuxh 2011-06-24 13:42 發表評論
]]>
路徑斜杠處理http://www.aygfsteel.com/yuxh/archive/2011/06/15/352358.htmlyuxhyuxhWed, 15 Jun 2011 06:47:00 GMThttp://www.aygfsteel.com/yuxh/archive/2011/06/15/352358.htmlhttp://www.aygfsteel.com/yuxh/comments/352358.htmlhttp://www.aygfsteel.com/yuxh/archive/2011/06/15/352358.html#Feedback0http://www.aygfsteel.com/yuxh/comments/commentRss/352358.htmlhttp://www.aygfsteel.com/yuxh/services/trackbacks/352358.html閱讀全文

yuxh 2011-06-15 14:47 發表評論
]]>
主站蜘蛛池模板: 攀枝花市| 土默特左旗| 平果县| 黄石市| 威海市| 大宁县| 都兰县| 呼伦贝尔市| 西充县| 滦南县| 江阴市| 郯城县| 庆安县| 井研县| 兴宁市| 衡东县| 湖北省| 遵化市| 汾阳市| 永平县| 威信县| 左云县| 柯坪县| 陆川县| 邯郸市| 桂平市| 临汾市| 神农架林区| 武隆县| 北票市| 湘潭县| 略阳县| 瓦房店市| 皮山县| 花垣县| 那坡县| 延安市| 米林县| 海晏县| 武川县| 临猗县|