More servicesWindows Live
HomeHotmailSpacesOneCare
 
MSN
Sign in
 
 
Spaces home  王 府-前PhotosProfileFriendsMore Tools Explore the Spaces community
There are no music lists on this space.

王 府-前

August 23

unix环境下标准C实现的遍历某个文件夹下面所有文件


#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <dirent.h>
int testdir(char *path)
{
struct stat buf;
if(lstat(path,&buf)<0)
{
return 0;
}
if(S_ISDIR(buf.st_mode))
{
return 1; //directory
}
return 0;
}


int directory(char *path)
{
DIR *db;
char filename[128];
struct dirent *p;
db=opendir(path);
if(db==NULL)return 0;
memset(filename,0,128);
while ((p=readdir(db)))
{
if((strcmp(p->d_name,".")==0)||(strcmp(p->d_name,"..")==0))
continue;
else
{
sprintf(filename,"%s/%s",path,p->d_name);
if(testdir(filename))
{
directory(filename);
}
else {
printf("%s\n",filename);
}
}
memset(filename,0,64);
}
closedir(db);
return 0;
}
int main(int argc,char **argv)
{
char *path="./"; //要遍历的目录
if(access(path,F_OK)==0&&testdir(path))
{
printf("is directory\n");
directory(path);
}
else printf("%s not exist\n",path);

}
September 28

议接口(interface)

接口(interface)提供给我们的更多的灵活性还是一个标准?
September 26

ET Limit方式的分页查询

1.Limit

   默认的情况下eXtremeTable取得所有的结果集然后处理Beans集合,这样的好处是 你可以随意进行排序、过滤和分页操作。
你只需要组装Beans集合并让eXtremeTable知道如何 然而在查询结果较大,可以考虑使用数据库端分页的方案。此时,eXtremeTable
会使用Limit对象向Action/Controller传递PageNo,PageSize,OrderBy等分页信息。而服务端将向EC返回总记录数和当前页的内容。

2.创建Limit

    
    首先你需要通过LimitFactory得到一个Limit实例:

           Context context = new HttpServletRequestContext(request);      
             LimitFactory limitFactory = new TableLimitFactory(context);      
             Limit limit = new TableLimit(limitFactory);

    
   Limit对象定义了limit结果集的所有方法。
  TableLimitFactory具有另外一个构造函数,如果JSP页面使用了两个(以上)eXtremeTable的话你可以利用tableId分别传输totalRows,如果默认tableId将为所有ec,。

    

Context context = new HttpServletRequestContext(request);
    LimitFactory limitFactory = new TableLimitFactory(context, tableId);
    Limit limit = new TableLimit(limitFactory);

    
   设置行属性:

        limit.setRowAttributes(totalRows, DEFAULT_ROWS_DISPLAYED);

3. 前台jsp页面中ec标莶写法:  

  
    
    

<ec:table
        items="userlist"
        var="u"
        action="/pageAction.do"       
        title="后台用户管理——管理用户"
        retrieveRowsCallback="limit" 
        width="80%"
        rowsDisplayed="3"
        form=""
        >   
        <ec:row>
            ...
            ...           
        </ec:row>
    </ec:table>

    
    使用callback需要做的唯一事情是传输集合到request,同时传输totalRows属性。 totalRows表示总行数,
  

       request.setAttribute("userlist", userlist);
       request.setAttribute("totalRows", new Integer(总记录数));

    

4.实例:

本实例是ec结合Struts和Hibernate进行分页.
    
     PageAction中的部分代码:
      

public ActionForward execute(ActionMapping mapping, ActionForm form,
  HttpServletRequest request, HttpServletResponse response)
        throws Exception {
     UserDAO userDAO = (UserDAO) getBean("userDAO"); 
     Limit limit = ExtremeTablePage.getLimit(request,defaultPageSize);
     PageBean page = new PageBean();
     page.setPageSize(limit.getCurrentRowsDisplayed()); //ec通过limit对象传递pageSize给PageBean
     page.setPage(limit.getPage());//ec通过limit对象传递pageNo给PageBean
     List list = userDAO.findAllUser(page);
     request.setAttribute("userlist", list);
     request.setAttribute("totalRows", new Integer(page.getCount()));
    
     return mapping.findForward("userlist");
  
 }

     
     Limit对象的实例化在ExtremeTablePage中
  

     static public Limit getLimit(HttpServletRequest request,int defaultPageSize) {
        Context context = new HttpServletRequestContext(request);
        LimitFactory limitFactory = new TableLimitFactory(context);
        TableLimit limit = new TableLimit(limitFactory);
        limit.setRowAttributes(Integer.MAX_VALUE, defaultPageSize);
        return limit;
      }

      
      PageBean类部分代码:
     
      

public class PageBean {
      private int count = 0; // 记录总数
      private int pageSize = 10; // 每页显示记录数
          private int pageCount = 0; // 总页数
          private int page = 1; // 当前页数
          .
          .
          .
          public int getCount() {
             return count;
         }
       public void setCount(int count) {
          if (pageSize != 0) {
             pageCount = count / pageSize;
          if (count % pageSize != 0) {
             pageCount++;
           }
       }
       this.count = count;
      }
 
      public int getPage() {
        return page;
      }
     public void setPage(int page) {
       this.page = page;
     }
     public int getPageCount() {
      return pageCount;
     }
     public void setPageCount(int pageCount) {
       this.pageCount = pageCount;
    }
     public int getPageSize() {
       return pageSize;
     }
     public void setPageSize(int pageSize) {
       this.pageSize = pageSize;
     }
  .
  .
  .
 }

dao层使用PageBean对象进行查询。

September 25

AJAX方式的ET的使用

 1.DWR配置和使用

设置DWR的使用是简单的:
将DWR的jar文件拷入Web应用的WEB-INF/lib目录中,
在web.xml中增加一个servlet声明,并创建DWR的配置文件。DWR的分发中需要使用一个单独的jar文件。
你必须将DWR servlet加到应用的WEB-INF/web.xml中。

在WEB-INF目录下创建一个dwr.xml文件

<!DOCTYPE dwr PUBLIC   
"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"   
"http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
 <allow>
  <create creator="new" javascript="Assembler">
   <param name="class"
    value="com.systop.ec.Assembler" />
   <include method="getTable" />
  </create>
 </allow>
 <signatures>
  <![CDATA[      
import java.util.Map;      
import java.util.List;      
import com.systop.ec.Assembler;      
import javax.servlet.http.HttpServletRequest;      
Assembler.getTable(Map<String, List> parameterMap, HttpServletRequest request);      
]]>
 </signatures>
</dwr>

2.创建POJO

 DWR使用(works with)POJOs。这个非常符合我们的需要,因为eXtremeTable有足够的API使用Jsp标签来构造表。
实际上,JSP标签只不过是eXtremeTable Java API的前端。首先,我将展示构造表的方法:

public class Assembler {
  private Object build(TableModel model, List pres) throws Exception {
    Table table = model.getTableInstance();
    table.setTableId("assembler");
    table.setItems(pres);
    table.setAction(model.getContext().getContextPath() + "/userAction.do");
    table.setTitle("ET+AJAX");
    table.setImagePath(model.getContext().getContextPath()+"/images/table/*.gif");
    table.setRowsDisplayed(3);
    table.setOnInvokeAction("buildTable('assembler')");
   
    model.addTable(table);    Row row = model.getRowInstance();
    row.setHighlightRow(Boolean.FALSE);
    model.addRow(row);    Column columnName = model.getColumnInstance();
    columnName.setProperty("name");
    model.addColumn(columnName);    Column columnNickName = model.getColumnInstance();
    columnNickName.setProperty("nickname");
    model.addColumn(columnNickName);    Column columnTerm = model.getColumnInstance();
    columnTerm.setProperty("term");
    model.addColumn(columnTerm);
 
    return model.assemble();
  }   /**
   * 这个方法调用比较频繁,它执行双重职责。它需要被Controller(如果使用Spring的话)在第一次调用,
   * 如果使用Struts就等同于Action类。 随后,当使用AJAX时,这个方法也需要被调用,但是这次将传入一个
   * 定制的parameterMap。parameterMap将包含eXtremeTable使用AJAX需要的所有参数。当你看了 Controller
   * 和JSP后,这点将更加清晰。
   * @param parameterMap
   * @param request
   * @return
   */
  public String getTable(Map parameterMap, HttpServletRequest request) {
    WebApplicationContext webApplicationContext = WebApplicationContextUtils
        .getWebApplicationContext(request.getSession().getServletContext());
    PresidentsDao presidentsDao = (PresidentsDao) webApplicationContext.getBean("presidentsDao");
    List presidents = presidentsDao.getPresidents();
    Context context = null;
    if (parameterMap == null) {
      context = new HttpServletRequestContext(request);
    } else {
      context = new HttpServletRequestContext(request, parameterMap);
    }
    TableModel model = new TableModelImpl(context);
    try {
      return build(model, presidents).toString();
    } catch (Exception e) {
      e.printStackTrace();
    }
    return "";
  }
}

3.创建Action

  public ActionForward execute(ActionMapping mapping, ActionForm form,
      HttpServletRequest request, HttpServletResponse response)
      throws Exception {               Assembler assembler = new Assembler();                                       Object viewData = assembler.getTable(null, request);                                     request.setAttribute("assembler", viewData);                                       return mapping.findForward("userList");              }

  Action在被第一次调用时来构建表。它调用POJO并将表传给request。注意空值(null)如何使用parameterMap传输。
  这是因为第一次表被构造时,没有对应表需要知道的actions
 

  4.创建JSP

通过引入(importing)合适的javascript文件来开始构建JSP页面。唯一需要包含进工程的javascript文件
  是extremecomponents.js,其它的javascript文件申明都是DWR使用的。

 
  <script type="text/javascript" src="<c:url value="/dwr/interface/Assembler.js"/>"></script> 
  <script type="text/javascript" src="<c:url value="/dwr/engine.js"/>"></script> 
  <script type="text/javascript" src="<c:url value="/dwr/util.js"/>"></script> 
  <script type="text/javascript" src="<c:url value="/js/extremecomponents.js"/>"></script>

  接着,插入钩子(hook)来显示表,div被用来调用innerHtml并构建新的标签。

<div id="tableDiv">    <c:out value="${assembler}" escapeXml="false"/>   </div>

  
  最后,添加javascript来调用DWR的钩子(hooks)。 <script type="text/javascript"> 

function buildTable(form) {   
var parameterMap = getParameterMap(form);      
Assembler.getTable(parameterMap, showTable);
 } 
 function showTable(table) {   
 document.getElementById('tableDiv').innerHTML=table; 
 }
 </script>

getParameterMap()方法包含在extremecomponents.js文件中,将的到所有的form参数。你需要传入一个 form id的参照。
记住,eXtremeTable本质上是一个form组建,tableid作为form id使用。默认的tableId为ec,但是你通常想要设置tableId,
以示大家能更容易阅读你的代码。你将使用parameterMap调用 POJO的getTable方法。showTable是一个callback告诉DWR当从
getTable()方法返回时将调用什么操作。 

                                                                                                                                     参考:http://www.blogjava.net/lucky/archive/2006/03/27/37623.html

eXtreme Table 的基本用法及配制

1。简介:

     Extreme Table 是ExtremeCompontents(Home Page:http://www.extremecomponents.org? )中一个功能强大     而又容易配置,扩展,自定义的Table 控件,其功能包括排序, 分页, 导出Excel, pdf和汇总。

2。基本配制:

     1)首先下载发行包 http://sourceforge.net/projects/extremecomp;
     2)将包内的extremecomponents.jar 文件拷贝到项目的 WEB-INF/lib 目录中   
     3)将 dist 目录中的 extremecomponents.tld 文件拷贝到 WEB-INF 中     
     4)将 test 目录中的 test.jsp 文件拷贝到 webroot目录中  (测试用Demo) 
     5)将 images 文件夹拷贝到 webroot目录中
     6)将  extremecomponents.css 拷贝到 webroot/css目录中
     7)在/source/org/extremecomponents/table/core目录找到extremetable.properties文件,
       把它复制到src/conf里面并进行修改(ExtremeTable支持在properties文件里方便的统一配置丰富的全局属性).

        在extremetable.properties里一般只写需要修改的文件:
             table.filterable=false
             table.imagePath=/images/table/*.gif
             table.locale=zh_CN
             table.view.html=org.extremecomponents.table.view.CompactView
             row.highlightRow=true
             column.format.date=yyyy-MM-dd
             column.format.currency=###,###,###,###,#00.00
            
        在web.xml中加上:
            <context-param>
            	<param-name>extremecomponentsPreferencesLocation</param-name>
            	<param-value>/extremetable.properties</param-value>
            </context-param>

3. 测试:
      
       到些一些基本配制已完毕,运行Tomcat,访问http://localhost:8080/test.jsp
       OK去试试吧!

View more entries
 
Updated 6/26/2007
No list items have been added yet.