[转载]分享一个帮助用户全屏阅读的jQuery插件 - jQuery fullscreen

mikel阅读(1129)

[转载]分享一个帮助用户全屏阅读的jQuery插件 – jQuery fullscreen – gbin1 – 博客园.

分享一个帮助用户全屏阅读的jQuery插件 - jQuery fullscreen

在线演示 在线下载

今天介绍一款帮助网站提高用户体验的JQuery插件 – JQuery fullscreen,它能够帮助网站实现针对阅读内容的全屏显示功能。

这个插件基于Full Screen API.,目前有半数的浏览器支持这个API。

  • 支持 Firefox 10, Safari and Chrome;
  • 使用requestFullScreen() 方法触发;
  • 可以支持任何元素的全屏显示,而不仅仅是页面
  • 由于安全原因,只支持用户触发全屏
  • 也由于安全原因,输入被严格控制,除了方向键其它按键不能使用
  • API还不完善,只能使用浏览器指定方法(前缀为moz and webkit)

JQuery代码

jQuery(document).ready(function($){
    if($.support.fullscreen){
        $('#fullscreen').click(function(e){
            $('#content').fullScreen();
            e.preventDefault();
        });
    }
});    

[原创]修改了web.config的数据库连接字符串端口

mikel阅读(1944)

需要修改web.config的数据库连接字符串端口,原以为直接IP地址加“:”然后端口号,就搞定了,可是怎么也连接不上,原来是需要写成Server=IP地址,端口号的格式,于是又去博客园搜了下相关文章,发现设置数据库连接还有很多参数,引用如下:

先来看一下默认的连接SQL Server数据库配置
<connectionStrings>
<add name=”LocalSQLServer” connectionString=”Data Source=.\SQLExpress;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true” providerName=”System.Data.SQLClient” />
</connectionStrings>

SqlConnectionStringBuilder实例化时需要使用connectionString。 如:SqlConnectionStringBuild builder = new SqlConnectionStringBuild(connectionString);
一、Data Source
SqlConnectionStringBuilder的DataSource属性,对应 connectionString中的Data Source,“Data Source”可以由下列字符串代替:“Server”,“Address”,“Addr”和“Network Address”。
Data Source=.\SQLExpress也可以写成这样Data Source=(local)\SQLExpress。

二、Integrated Security
SqlConnectionStringBuilder 的 IntegratedSecurity 属性,对应 connectionString 中的I ntegrated Security,“Integrated Security”可以写成“trusted_connection”。
为 True 时,使用当前的 Windows 帐户凭据进行身份验证,为 False 时,需要在连接中指定用户 ID 和密码。可识别的值为 True、False、Yes、No 以及与 True 等效的 SSPI。
如果没有些则必须写上 uid=sa;pwd=123 之类的设置“uid”也可使用“User ID”,“pwd”也可换为“PassWord”。

SSPI:Microsoft安全支持提供器接口(SSPI)是定义得较全面的公用API,用来获得验证、信息完整性、信息隐私等集成安全服务,以及用于所有分布式应用程序协议的安全方面的服务。
应用程序协议设计者能够利用该接口获得不同的安全性服务而不必修改协议本身。

三、AttachDBFilename
SqlConnectionStringBuilder 的 AttachDBFilename 属性,对应 connectionString 中的 AttachDBFilename,“AttachDBFilename”可以写成“extended properties”,“initial file name”。
AttachDbFileName 属性指定连接打开的时候动态附加到服务器上的数据库文件的位置。
这个属性可以接受数据库的完整路径和相对路径(例如使用|DataDirectory|语法),在运行时这个路径会被应用程序的 App_Data 目录所代替。

四、User Instance
SqlConnectionStringBuilder 的 UserInstance 属性,对应 connectionString 中的 User Instance ,该值指示是否将连接从默认的 SQL Server 实例重定向到在调用方帐户之下运行并且在运行时启动的实例。
UserInstance=true 时,SQLServerExpress 为了把数据库附加到新的实例,建立一个新的进程,在打开连接的用户身份下运行。
ASP.NET 应用程序中,这个用户是本地的 ASPNET 帐号或默认的 NetworkService,这依赖于操作系统。
为了安全地附加非系统管理员帐号(例如ASP.NET帐号)提供的数据库文件,建立一个独立的 SQLServer 用户实例是必要的。

五、Initial Catalog 等同于 Database。

六、providerName 指定值“System.Data.OracleClient”,该值指定 ASP.NET 在使用此连接字符串进行连接时应使用 ADO.NET System.Data.OracleClient 提供程序。
PS:
DataDirectory是什么?

asp.net 2.0有一个特殊目录app_data,通常Sql Server 2005 express数据文件就放在这个目录,相应的数据库连接串就是:
connectionString=”…… data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|data.mdf;User Instance=true”
这里有一个DataDirectory的宏,它表示什么意义呢?

DataDirectory是表示数据库路径的替换字符串。由于无需对完整路径进行硬编码,DataDirectory 简化了项目的共享和应用程序的部署。例如,无需使用以下连接字符串:
“Data Source= c:\program files\MyApp\app_data\Mydb.mdf”
通过使用|DataDirectory|(包含在如下所示的竖线中),即可具有以下连接字符串:
“Data Source = |DataDirectory|\Mydb.mdf” 。

不仅仅是Sql server 2005 express中使用,也可以在其它的文件数据库中使用,例如Sqllite数据库文件的连接字符串:

<add name=”DefaultDB”
connectionString=”DriverClass=NHibernate.Driver.SQLite20Driver;Dialect=NHibernate.Dialect.SQLiteDialect;Data Source=|DataDirectory|\data.db3″ />

—————————————    附加一些连接语句例子    —————————————

<–普通例子1–>
<configuration>
<connectionStrings>
<add name=”Sales” providerName=”System.Data.SqlClient” connectionString=”server=myserver;database=Products;uid=salesUser;pwd=sellMoreProducts” />

<add name=”NorthWind” providerName=”System.Data.SqlClient” connectionString=”server=.;database=NorthWind;Integrated Security=SSPI” />

</connectionStrings>
</configuration>

<–普通例子2–>
<configuration>
<connectionStrings>
<add name=”NorthWind” connectionString=”Provider=SQLOLEDB;Integrated Security=SSPI;Initial Catalog=da;Data Source=bar” />
</configuration>

———————————————————————————————————-

<connectionStrings>
<add name=”LocalSqlServer” connectionString=”Data Source=.\SQLExpress;Initial Catalog=NorthWind;Integrated Security=SSPI” providerName=”System.Data.SqlClient” />
</connectionStrings>
<–也可写为–>
<connectionStrings>
<add name=”LocalSqlServer” connectionString=”Server=.\SQLExpress;Database=NorthWind;Integrated Security=Yes” providerName=”System.Data.SqlClient” />
</connectionStrings>

———————————————————————————————————-

<configuration>
<connectionStrings>
<add name=”DB2005_2″
providerName=”System.Data.SqlClient”
connectionString=”Data Source=.;Initial Catalog=Northwind;User ID=dbtester;Password=zhi;Trusted_Connection=False;Connect Timeout=30;Min Pool Size=16;Max Pool Size=100″/>

<add name=”DB2005_1″
providerName=”System.Data.SqlClient”
connectionString=”Server=.;Database=Northwind;User ID=dbtester;Password=zhi;Trusted_Connection=False;Connect Timeout=30;Min Pool Size=16;Max Pool Size=100″/>

<add name=”Northword2000″
providerName=”System.Data.SqlClient”
connectionString=”Initial Catalog=Northwind;User ID=dbtester;PassWord=zhi;Persist Security Info=false;Data Source=(local);Connect Timeout=30;Min Pool Size=16;Max Pool Size=100;”/>

<add name=”SQLExp”
providerName=”System.Data.SqlClient”
connectionString=”Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\northwnd1.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True”/>

<add name=”Oracle”
connectionString=”Data Source=TEST;User ID=sa;Password=sa;”
providerName=”System.Data.OracleClient” />

<add name=”oleconn”
providerName=”System.Data.OleDb”
connectionString=”Provider=Microsoft.Jet.OleDb.4.0;Data Source=|DataDirectory|northwind.mdb”/>

<add name=”MySql”
providerName=”MySql.Data.MySqlClient”
connectionString=”Server=172.29.131.27;Port=3311;DataBase=comctl;Persist Security Info=False;User ID=root;Password=123456;Allow Zero Datetime=true;” />
</connectionStrings>
<system.data>
<DbProviderFactories>
<add name=”MySQL Data Provider”
invariant=”MySql.Data.MySqlClient”
description=”.Net Framework Data Provider for MySQL”
type=”MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=5.2.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d”/>
</DbProviderFactories>
</system.data>
</configuration>

======================================      可以保存为(以下转自他处).cs      ======================================

using System.Data.SqlClient;
using System.Configuration;
public class Class1
{
public Class1()
{
//Persist Security Info如果数据库连接成功后不再需要连接的密码,建议False
//string sql2000 = “Initial Catalog=Northwind;User ID=dbtester;PassWord=zhi;Persist Security Info=false;Data Source=(local);Connect Timeout=30;Min Pool Size=16;Max Pool Size=100;”;
//string sql2000 = “Initial Catalog=Northwind;User ID=sa;PassWord=5;Persist Security Info=false;Data Source=.”;
//string sql2000 = “Initial Catalog=Northwind;User ID=sa;PassWord=5;Persist Security Info=false;Data Source=newtime”;
string source = “server=(local);integrated security=SSPI;database=Northwind”;
string expressSource = @”Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\northwnd.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True”;
//Integrated Security采用windows的集成身份验证,integraged   Security=SSPI;
//Integrated Security=SSPI 这个表示以当前WINDOWS系统用户身去登录SQL SERVER服务器,如果SQL SERVER服务器不支持这种方式登录时,就会出错
//表示你的连接安全验证方式,可用trusted_connection=yes取代
//Integrated Security 为 True。用户实例仅与集成安全性一起使用,带有用户名和密码的 SQL Server 用户不起作用。
//string source3 = @”Data Source=190.190.200.100,1433;Network Library=DBMSSOCN;Initial Catalog= pubs;UserID=sa;Password=asdasd;”;
//(DBMSSOCN=TCP/IP instead of Named Pipes, at the end of the Data Source is the port to use (1433 is the default))
//Standard Security:
string source4 = “Data Source=Aron1;Initial Catalog= pubs;UserId=sa;Password=asdasd;”;
string source5 = “Server=Aron1;Database=pubs;UserID=sa;Password=asdasd;Trusted_Connection=False”;
//Trusted_Connection ‘false’ 当为 false 时,将在连接中指定用户 ID 和密码。当为 true 时,将使用当前的 Windows 帐户凭据进行身份验证。
//可识别的值为 true、false、yes、no 以及与 true 等效的 sspi(强烈推荐)。所以一定要设置Trusted_Connection= false,以防被别人”登录”、”注入语句”等
string source6 = “Data Source=Aron1;Initial Catalog=pubs;Integrated Security=SSPI;”;
string source7 = “Server=Aron1;Database=pubs;Trusted_Connection=True;”;
//(use serverName\instanceName as Data Source to use an specifik SQLServer instance, only SQLServer2000)
//Integrated   Security或Trusted_Connection   ‘false’   当为   false   时,
//将在连接中指定用户   ID   和密码。当为   true   时,将使用当前的   Windows   帐户凭据进行身份验证
//VS2003:string connStr=System.Configuration.ConfigurationSettings.AppSettings[“SQLCONNECTIONSTRING”];2003中用的
//VS2005:string connStr=System.Configuration.ConfigurationManager.ConnectionStrings[“SQLCONNECTIONSTRING”].ToString(); 2005-8中用
System.Configuration.ConnectionStringSettings i = System.Configuration.ConfigurationManager.ConnectionStrings[“Northword2000”];
}
}

[转载]利用Attribute简化SQL删除操作

mikel阅读(1250)

[转载]利用Attribute简化SQL删除操作 – ahl5esoft – 博客园.

昨天跟朋友聊天,发现他们的项目数据层使用的是最基础的纯SQL语句+SQLParameter进行数据交互的,大家知道SELECT、UPDATE、CREATE对于表的依赖性比较大,然后删除语句却不一样,它的语法比较简单,大致有以下几种:

1、DELETE FROM TableName

2、DELETE FROM TableName WHERE ID = idValue

3、DELETE FROM TableName WHERE ID IN (id1, id2, id3, id4….)

于是我们要实现这个简单的功能来简化比较常用的删除就比较容易了,主要保留2个数据,1个是TableName,另外1个就是ID了,如果实体 类有基类的情况下,我们可以扩展基类,提供2个接口,让其他的实体类去实现来保存对应的TableName和ID。但是如果没有基类的话,我们也可以利用 Attribute来实现这个功能。

Attribute代码如下:

 1 [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
 2 public class DbAttribute : Attribute
 3 {
 4     #region 变量
 5 
 6     private string m_TableName = null;
 7 
 8     private string m_PrimaryKey = null;
 9 
10     #endregion
11 
12     #region 构造函数
13 
14     public DbAttribute(string tableName, string primaryKey)
15     {
16         this.m_TableName = tableName;
17         this.m_PrimaryKey = primaryKey;
18     }
19 
20     #endregion
21 
22     #region 普通方法
23 
24     public string GetDeleteAllSQL()
25     {
26         return string.Format(@"
27             DELETE
28             FROM
29                 {0}", this.m_TableName);
30     }
31 
32     /// <summary>
33     /// 获取根据主键删除表数据
34     /// </summary>
35     /// <typeparam name="TParam">数据库类型</typeparam>
36     /// <typeparam name="TPKValue">主键类型名</typeparam>
37     /// <param name="tPKValue">主键值</param>
38     /// <returns></returns>
39     public KeyValuePair<string, TParam[]> GetDeleteByPrimaryKeySQL<TParam, TPKValue>(TPKValue tPKValue)
40         where TParam : DbParameter, new()
41     {
42         var sql = string.Concat(this.GetDeleteAllSQL(), string.Format(@"
43             WHERE
44                 {0} = :_pk_", this.m_PrimaryKey));
45         MarkParameter<TParam> markParameter = new MarkParameter<TParam>();
46         var arrDbParam = markParameter.CastMark(ref sql, new Hashtable
47         {
48             {"_pk_", tPKValue}
49         });
50         return new KeyValuePair<string, TParam[]>(sql, arrDbParam);
51     }
52 
53     /// <summary>
54     /// 获取根据主键数组删除表数据
55     /// </summary>
56     /// <typeparam name="TParam"></typeparam>
57     /// <typeparam name="TPKValue"></typeparam>
58     /// <param name="arrTPKValue"></param>
59     /// <returns></returns>
60     public KeyValuePair<string, TParam[]> GetDeleteInPrimaryKeySQL<TParam, TPKValue>(params TPKValue[] arrTPKValue)
61         where TParam : DbParameter, new()
62     {
63         var sql = string.Concat(this.GetDeleteAllSQL(), string.Format(@"
64             WHERE
65                 {0} IN (:_arr_pk_)", this.m_PrimaryKey));
66         MarkParameter<TParam> markParameter = new MarkParameter<TParam>();
67         var arrDbParam = markParameter.CastMark(ref sql, new Hashtable
68         {
69             {"_arr_pk_", arrTPKValue}
70         });
71         return new KeyValuePair<string, TParam[]>(sql, arrDbParam);
72     }
73 
74     #endregion
75 }

以上用到泛型模式以及前几篇文章提到的替换参数的方法,文章在此。有了以上的Attribute,我们就可以用它来标记实体类了,代码如下:

1 [Db("Permission_Info", "p_id")]
2 public partial class Permission
3 {
4     //属性、方法等
5 }

为了演示,我写了一个用来调用的方法,来测试产生的语句和参数。测试类代码如下:

 1 public class DbOperate
 2 {
 3     public static string GetDeleteSQL<TClass>() where TClass : new()
 4     {
 5         var attr = GetAttribute<TClass>();
 6         var sql = string.Empty;
 7         if (null != attr)
 8         {
 9             sql = attr.GetDeleteAllSQL();
10         }
11         return sql;
12     }
13 
14     public static KeyValuePair<string, SqlParameter[]> GetDeleteByIdSQL<TClass, TPKValUe>(params TPKValUe[] arrTPKValue) where TClass : new()
15     {
16         var attr = GetAttribute<TClass>();
17         KeyValuePair<string, SqlParameter[]> pair = new KeyValuePair<string, SqlParameter[]>(null, null);
18         if (null != attr)
19         {
20             if (1 == arrTPKValue.Length)
21             {
22                 pair = attr.GetDeleteByPrimaryKeySQL<SqlParameter, TPKValUe>(arrTPKValue[0]);
23             }
24             else
25             {
26                 pair = attr.GetDeleteInPrimaryKeySQL<SqlParameter, TPKValUe>(arrTPKValue);
27             }
28         }
29         return pair;
30     }
31 
32     static DbAttribute GetAttribute<T>() where T : new()
33     {
34         var arrAttribute = typeof(T).GetCustomAttributes(typeof(DbAttribute), false);
35         DbAttribute attr = null;
36         if (0 < arrAttribute.Length)
37         {
38             attr = arrAttribute[0] as DbAttribute;
39         }
40         return attr;
41     }
42 }

代码测试如下:

以上代码并不是最优的选择,我们仍然可以在Attribute调用的地方进行优化,大家可以参考老赵的《Attribute操作的性能优化方式》

[转载]推荐几个不错的jQuery图表插件

mikel阅读(1195)

[转载]推荐几个不错的jQuery图表插件,让你的报表更清晰动感 – sxwgf – 博客园.

很多时候我们需要在网页中显示数据统计报表,从而能很直观地了解数据的走向,更好地帮助决策分析。今天就给大家分享几个个人觉得好用的JQuery图表插件,这几个图表插件使用起来非常方便,而且挺灵活的,相信大家会喜欢。

jqPlot(中文API说明及示例和源码)推荐

jqPlot是一款基于JQuery类库的图标绘制插件。通过jqPlot可以在网页中绘制线状、柱状、饼状等多种样式图表

Google Chart(中文API详解)

利用Google Chart API可以动态地生成图表图形,例如在地址栏中输入
http://chart.apis.google.com/chart?cht=p3&chd=t:60,40&chs=250×100&chl=Hello|World
即可看到生成的报表图片。google好多api都关闭了,chart服务应该目前不会关。

Flot(中文文档)推荐

flot 是一个基于JQuery的开源JavaScript库,是一个纯粹的 jQuery JavaScript 绘图库,可以在客户端即时生成图形,使用非常简单,支持放大缩小以及鼠标追踪等交互功能。

TufteGraph

主要是画柱状图,也是基于jQuery

Sparkline(中文说明)

jQuery Sparklines可以用来生成静态或动态波谱图表效果,其特点是:凸现数据显示,设计简单,能提供文字大小图片。

介绍就到这里,希望对大家有所帮助。

[转载]Android 与web一起工作(Android读取网站特定页面)

mikel阅读(921)

[转载]Android 与web一起工作(Android读取网站特定页面) – wxj200589 – 博客园.

项目设想

网站部分开发一个关于web开发知识的站点,要通过Android来阅读这个模块的内容。

实现

  • 通过手机浏览器直接阅读,优点:不用安装单独的客户端。缺点:会存在一些冗余的信息消耗客户的流量。
  • 通过一个自己网站实现的app,优点:可以针对手机客户端单独设计app,将其他图片和无相关的内容过滤掉,节省客户的流量,缺点:开发成本变大。

现在我们通过技术实现第二种实现方式:自己实现Android客户端。

一 建立自己的站点

将自己的站点的内容发布,更新,删除都放到web互联网上维护,相信有很多收费和不收费的,上网找找就能找到自己满意的。我们这次讲得重点是Android app。

二 新建一个view

这个view很简单,就是一个可以下来查看当前全部的文字内容。

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
              android:layout_width="306px" android:layout_height="410px" 
              android:layout_x="7px" android:layout_y="61px"
             android:scrollbars="vertical" android:fadingEdge="vertical"> 
    <TextView
      android:id="@+id/ResultView"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:layout_marginTop="2px"
     android:layout_marginBottom="2px"
     android:layout_marginLeft="2px"
     android:layout_marginRight="2px"
     android:text=""
     android:layout_x="7px"
     android:layout_y="61px"
     >
     </TextView>
</ScrollView>

三 新建一个app工程(InternetActivity)

这次用到的是HttpGet,类似的还可以使用HttpPost.具体代码如下:

public class InternetActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.rdbox);
        TextView rbox=(TextView)findViewById(R.id.ResultView);

        HttpGet post=new HttpGet("http://www.71site.com/");
        try{
        HttpResponse response=new DefaultHttpClient().execute(post);
        if(response.getStatusLine().getStatusCode()==200){
                String result=EntityUtils.toString(response.getEntity());
                result=result.replaceAll("<", "");
                result=result.replaceAll(">", "");
            rbox.setText(result);
        }
        else{
            rbox.setText("code:"+response.getStatusLine().toString());
        }
        }
        catch(Exception ex){
            rbox.setText("error:"+ex.getMessage().toString());
            ex.printStackTrace();
        }

    }

}

运行,发现有错误,不能正常返回内容,查找之后发现,Android的权限很严格,还要在AndroidManifest.xml加入一行代码:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="qiyesite.android.readbox"
    android:versionCode="1"
    android:versionName="1.0" >

<uses-permission android:name="android.permission.INTERNET" />

记住位置很重要,一定要放到manifest 下的第一级目录。最好上一张运行效果图。

image

[转载]Android SD卡 文件或目录拷贝、复制、粘贴

mikel阅读(1038)

[转载]Android SD卡 文件或目录拷贝、复制、粘贴 – wainiwann – 博客园.

在使用ES文件浏览器的时候,当浏览SD卡下的文件或者其他地方的文件时,如果长按某一 项文件或某一目录时会有”剪切”、”复制”、”重命名”、”删除” 等操作。于是乎自己也想弄一个类似与ES文件浏览器上面的拷贝复制功能。至于做一个类似ES文件浏览器 一样的软件,也是可以做的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package com.copy.file;
/**
* @author wainiwann
* Android SD卡文件目录拷贝操作
*
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import Android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class Copy_File extends Activity
{
private Button m_btn = null;
private final static String FROMPATH = "/mnt/sdcard/A/";
private final static String TOPATH = "/mnt/sdcard/B/";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
m_btn = (Button)findViewById(R.id.button1);
m_btn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
if(copy(FROMPATH, TOPATH)==0)
{
Toast.makeText(Copy_File.this,"文件拷贝成功!!!",20000).show();
}else
{
Toast.makeText(Copy_File.this,"文件拷贝失败!!!",20000).show();
}
}
});
}
public int copy(String fromFile, String toFile)
{
//要复制的文件目录
File[] currentFiles;
File root = new File(fromFile);
//如同判断SD卡是否存在或者文件是否存在
//如果不存在则 return出去
if(!root.exists())
{
return -1;
}
//如果存在则获取当前目录下的全部文件 填充数组
currentFiles = root.listFiles();
//目标目录
File targetDir = new File(toFile);
//创建目录
if(!targetDir.exists())
{
targetDir.mkdirs();
}
//遍历要复制该目录下的全部文件
for(int i= 0;i<currentFiles.length;i++)
{
if(currentFiles[i].isDirectory())//如果当前项为子目录 进行递归
{
copy(currentFiles[i].getPath() + "/", toFile + currentFiles[i].getName() + "/");
}else//如果当前项为文件则进行文件拷贝
{
CopySdcardFile(currentFiles[i].getPath(), toFile + currentFiles[i].getName());
}
}
return 0;
}
//文件拷贝
//要复制的目录下的所有非子目录(文件夹)文件拷贝
public int CopySdcardFile(String fromFile, String toFile)
{
try
{
InputStream fosfrom = new FileInputStream(fromFile);
OutputStream fosto = new FileOutputStream(toFile);
byte bt[] = new byte[1024];
int c;
while ((c = fosfrom.read(bt)) > 0)
{
fosto.write(bt, 0, c);
}
fosfrom.close();
fosto.close();
return 0;
} catch (Exception ex)
{
return -1;
}
}
}

下次在写个文件浏览器,然后在获取某一项的长按事件,然后弹出一个Dialog实现文件操作。

[转载]jQuery插件原来如此简单——jQuery插件的机制及实战

mikel阅读(1115)

[转载]jQuery插件原来如此简单——jQuery插件的机制及实战 – artwl – 博客园.

JQuery插件的种类

1、封装对象方法

这种插件是将对象方法封装起来,用于对通过选择器获取的JQuery对象进行操作,是最常见的一种插件。此类插件可以发挥出jQuery选择器 的强大优势,有相当一部分的jQuery的方法,都是在jQuery脚本库内部通过这种形式“插”在内核上的,例如parent()方 法,appendTo()方法等。

2、封装全局函数

可以将独立的函数加到jQuery命名空间下。如常用的jQuery.ajax()方法、去首尾空格的jQuery.trim()方法,都是jQuery内部作为全局函数的插件附加到内核上去的。

3、选择器插件

虽然jQuery的选择器十分强大,但在少数情况下,还是会需要用到选择器插件来扩充一些自己喜欢的选择器。

jQuery插件的机制

jQuery插件的机制很简单,就是利用jQuery提供的jQuery.fn.extend()和jQuery.extend()方法,扩展jQuery的功能。

jQuery.fn.extend()多用于扩展上面提到的3种类型中的第一种,jQuery.extend()用于扩展后两种插件。这两个方法都接受一个参数,类型为Object。Object对象的“名/值对”分别代表“函数或方法名/函数主体”。

编写jQuery插件的一些Tips

1、jQuery插件的文件名推荐命名为jquery.[插件名].js,以免和其他JS库插件混淆。

2、所有的对象方法都应当附加到jQuery.fn对象上,而所有的全局函数都应当附加到jQuery对象本身。

3、在插件头部加上一个分号,以免他人的不规范代码给插件带来影响。

4、所有的方法或函数插件,都应当以分号结尾,以免压缩时出现问题

5、除非插件需要返回的是一些需要获取的变量,插件应该返回一个jQuery对象,以保证插件的可链式操作。

6、利于jQuery.extend()方法设置插件方法的默认参数,增加插件的可用性。

jQuery插件结构

jQuery插件结构如下:

;(function($){
    /*这里放插件代码,可以将$作为jQuery的别名*/
})(jQuery);

封装jQuery对象方法插件实战

功能:设置选择的元素的颜色,获取选择的首个元素的颜色

命名:jquery.color.js

结构:

;(function($){
    $.fn.extend({
         //这里写插件代码
    });
})(jQuery);

思路:设置一个参数value,如果调用时传递了value这个参数,就是设置颜色,否则为获取颜色。获取和设置颜色可以用jQuery提供的css方法即可

完整代码:

;(function($){
    $.fn.extend({
        "color":function(value){
            if(value==undefined){
                return this.css("color");
            }
            else{
                return this.css("color",value);
            }
        }
    });
})(jQuery);

由于css()方法在获取颜色时已有取第一个元素的判断,所以这里直接用this.css(“color”)即可。

如果是一组插件,可以用如下写法:

;(function($){
    $.fn.extend({
        "color":function(value){
            //插件代码
        },
        "border":function(value){
            //插件代码
        },
        "background":function(value){
            //插件代码
        }
    });
})(jQuery);

插件测试:

封装全局函数插件实战

功能:单独去除左侧或单独去除右侧的空格

命名:jquery.lrtrim.js

结构:

;(function($){
    $.extend({
        ltrim:function(text){
            //插件代码
        },
        rtrim:function(text){
            //插件代码
        }
    });
})(jQuery);

思路:这类插件是在jQuery命名空间内部添加一个函数,直接用正则表达式即可。

完整代码:

;(function($){
    $.extend({
        ltrim:function(text){
            return (text||"").replace(/^\s+/g,"");
        },
        rtrim:function(text){
            return (text||"").replace(/\s+$/g,"");
        }
    });
})(jQuery);

插件测试:

自定义选择器插件实战

jQuery以其强大的选择器著称,那么jQuery的选择器的工作原理是什么呢?

jQuery的选择解析器首先会使用一组正则表达式来解析选择器,然后针对解析出的每一个选择符执行一个函数,称为选择函数。最后根据这个选择函数的返回值为true还是false来决定是否保留这个元素,这样就可以找到匹配的元素节点。

如$(“div:gl(1)”),该选择器首先会获取所有的<div>元素,然后隐式地遍历这些<div>元素,并逐 个将这些<div>元素作为参数,连同括号里的“1”等一些参数一起传递给gt对应的选择器函数进行判断。如果返回true则保留,否则不保 留,这样得到的结果就是一个符合要求的<div>元素的集合。

选择器的函数一共接受3个参数,形式如下:

function (a,i,m){
         //...
}

第一个参数为a,指的是当前遍历到的DOM元素。

第二个参数为i,指的是当前遍历到的DOM元素的索引值,从0开始。

第三个参数是m,它是由jQuery正则解析引擎进一步解析后的产物,是一个数组:其中最重要的一个是m[3],在$(“div:gl(1)”)中即为括号里的数字“1”。

在jQuery中已经有lt,gt和eq选择器,因此这里写一个介于两者之间(between)的选择器。

功能:选择索引值为a到b之间(a<b,a、b为正整数)的元素

命名:jquery.between.js

结构:

;(function($){
    $.extend($.expr[":"],{
        between:function(a,i,m){
            //插件代码
        }
    });
})(jQuery);

思路:在上面的三个参数中,m[3]为”a,b”的形式,因此把m[3]用”,”分隔,然后跟索引值i进行对比,如果i在m[3]表示的范围之间就返回true,否则为false

完整代码:

;(function($){
    $.extend($.expr[":"],{
        between:function(a,i,m){
            var temp=m[3].split(",");
            return +temp[0]<i&&i<+temp[1];
        }
    });
})(jQuery);

注:这里用+temp[0]、+temp[1]把字符串形式的数字转换成了数字

插件测试:

小结

本文主要介绍了jQuery插件的种类,机制,并针对每种类型进行了实战,希望能对大家有所帮助。本人也是jQuery的初学者,欢迎大家拍砖。

参考书籍:《锋利的jQuery》(人民邮电出版社)

[转载]翻译在没有安装ASP.NET MVC3的服务器上运行ASP.NET MVC3的程序

mikel阅读(1440)

[转载]【翻译】在没有安装ASP.NET MVC3的服务器上运行ASP.NET MVC3的程序-scottgu – liulun – 博客园.

原文地址:

http://weblogs.asp.net/scottgu/archive/2011/01/18/running-an-asp-net-mvc-3-app-on-a-web-server-that-doesn-t-have-asp-net-mvc-3-installed.aspx

为了更符合中文阅读习惯,我对原文做了小幅度修改

最近我们发布了一些新的Web产品 – 包括ASP.NET MVC 3。至今为止,我们已经获得了大量的反馈。

有几个朋友在问我一个问题:“我的网站托管服务提供商目前还不支持ASP.NET MVC 3 – 你知道他们将来什么时候会安装吗?”

好消息是,您不必等他们在Web服务器上安装ASP.NET MVC3。

只要您的网站托管服务提供商支持.NET 4,那么您现在就可以构建和部署ASP.NET MVC3应用程序了

– 不用托管供应商做任何事。

下面的文章介绍如何启用此功能。

一些背景:
我们支持两种方式使您可以使用一台机器上的ASP.NET MVC3组件:
1,在一台机器上,将ASP.NET MVC 3组件安装在一个集中的地方,WEB项目在那里引用这些组件

2,把ASP.NET MVC 3的组件复制到您的Web项目的\bin文件夹下,WEB项目在那里引用这些组件

第一种方法是我们使用Visual Studio中使用的默认方法,

这使得我们可以更容易为ASP.NET MVC 3提供升级服务(当发现BUG的时候)。

第二种方法也是得到了完全支持,没有在服务器上安装ASP.NET MVC3,也可以使用它。

你只要把ASP.NET MVC的组件放在你的WEB程序的bin目录中,然后把整个Web程序拷贝到FTP(WEB服务器)上,它就可以工作了。

如果您的网站托管服务提供商还没有在他们的服务器上安装ASP.NET MVC 3,那么您应该使用第二种方法。

方法1:基于GAC引用ASP.NET MVC组件
当您在计算机上安装ASP.NET MVC 3的时候,

一些组件会自动注册到GAC中(全局程序集缓存)。

GAC提供一个集中的地方供安装和升级(通过Windows更新).NET程序集。

因此ASP.NET MVC3项目默认在这里引用程序集。

如果你复制一个普通的ASP.NET MVC 3项目(使用默认的方法引用ASP.NET MVC3的程序集)

到一台没有安装ASP.NET MVC3的机器上,

当你运行应用程序时,

会看到一个类似的错误信息:

image

上述错误表示,

至少有一个运行ASP.NET MVC 3所需的程序集在GAC中找不到。

在机器上安装ASP.NET MVC 3就能解决这个问题,

让您的应用程序正常运行。

方法2:基于\ Bin目录中引用ASP.NET MVC组件
您的项目可以使用另一种方法

在您的Web应用程序的\bin目录中分发和引用的ASP.NET MVC3的程序集。

这种方法的好处是,你并不需要在一台机器上安装ASP.NET MVC3,以运行基于ASP.NET MVC3 Web应用程序。

相反,你只要复制你的web应用程序(在bin目录中包含MVC3的组件)到 .NET4服务器上,它就会运行。

这种方法是“完全信任”,“中等信任”的情景 (译注:我也不知道是什么意思

这意味着它甚至可以和低成本共享主机供应商共事。

无需托管服务提供商另外注册/安装/操作需要。

使您的Web项目包含ASP.NET MVC3程序集“bin部署”是非常简单的,

只需2分钟左右。下面是需要遵循的步骤:

Steps to Deploy an ASP.NET MVC 3 Application to a Web Hosting Provider with \Bin deployment

译注:这个链接好像打不开,笔者提供一个方法:

选中ASP.NET MVC引用的程序集,然后查看属性,把“复制到本地”修改为true

image

asp.net mvc3需要的程序集有

  • System.Web.Mvc
  • Microsoft.Web.Infrastructure
  • System.Web.Razor
  • System.Web.WebPages
  • System.Web.WebPages.Razor

一旦配置\BIN部署后,

您使用ASP.NET MVC 3构建的应用程序将在任何安装.NET4的Web服务器上工作。

只需复制到Web服务器,它就会运行。

即使是低成本共享托管账户,你也无需托管服务供应商做任何事。

找一个ASP.NET MVC 3网站托管服务提供商

您可以浏览Windows Web Hosting Gallery(Windows网站托管库)找到所有支持托管服务提供商:
image

Windows网站托管库允许您通过不同国家和服务水平来筛选/浏览托管服务。

它还能让您轻松过滤“共享主机”,“虚拟主机”和“专用主机”供应商。

“共享主机”是指在你没有管理员权限的远程服务器上,提供单一的Web服务器。
“虚拟主机”供应商在一个远程服务器上提供给你虚拟机 – 通常通过操作系统管理权限和管理的远程终端服务器来访问。

“专用主机”供应商提供您一个完整的物理服务器,通常也提供操作系统的管理员权限和远程终端支持。

基于Windows的网络托管的价格现在是非常符合成本效益的,

共享主机低至$2.75/月,虚拟主机提供的报价$23/月。

上述主机都能通过使用\ bin部署方法来运行ASP.NET MVC 3。

摘要
ASP.NET MVC 3的应用程序可以部署到任何拥有.NET4的Web服务器,

而不必等待托管服务提供商来安装ASP.NET MVC 3组件。

通过\ bin部署ASP.NET MVC3程序集,

只需使用上面的步骤就可转换您的项目,

那么你就可以复制你的应用程序到任何ASP.NET4服务器上。

[原创]EasyUI的numberbox取值计算问题

mikel阅读(2211)

今天遇到个比较郁闷的问题,
EasyUI的numberbox计算值总也设置不上
代码如下:

$('#number,#price').keyup(function(){
$('#total').numberbox('setValue',$('#number').numberbox('getValue')*1*$('#price').numberbox('getValue')*1);
});

只是一个简单的总金额=数量*单价的问题,居然计算不出正确的值,开始以为是keyup事件的写法问题,结果发现原来是numberbox的取值问题,代码修改如下:

$('#number,#price').keyup(function(){
$('#total').numberbox('setValue',$('#number').val()*1*$('#price').val()*1);
});

问题解决!