[原创]SimpleFramework Web应用开发(二)强烈申精

upsimple 发布于 2010/11/11 10:31
阅读 240
收藏 3

1   SimpleFramework Web应用开发 

通过前面分享了SimpleFramework的初步认识(一),今天将做simple3 mysql基于Web数据库应用的开发,

在开发之前,产生了以下几个疑问:

1、 真正的应用不象“Hello world!”这么简单,Simpe3 如何开发一个典型的数据库应用?

2、 如何获得Simple3的默认数据源,Simple数据访问是否好用

3、 Simple3中,提供了什么方便快捷的手段,来提高应用开发的效率?

带着这些问题, 这次从代码出发,通过一个小例子较完整的介绍SimpleFramework的开发过程

1.编写数据库脚本。SimpleFramework支持关系型数据库,只需要编写好数据库脚本,数据库初始化由框架自动完成。

 下面是一个完整的 sql-script.xml 文件。

<?xml version="1.0" encoding="UTF-8"?>

<sql-script>

    <version>1.0.0</version>

    <name>script</name>

    <description>CRUD Dev By SimpleFramework</description>

    <tran-sql>

       <description>CRUD</description>

       <![CDATA[

           CREATE TABLE `simple_framework_test` (

             `id` int(32) default NULL,

             `version` varchar(128) default NULL,

             `name` varchar(128) default NULL,

             `description` varchar(128) default NULL

           ) ENGINE=InnoDB DEFAULT CHARSET=gbk;

       ]]>

    </tran-sql>

</sql-script>

 

2.编写业务代码,基于框架开发,代码结构如下:

         Src(包名+模块名)

              |-------Handle  net.simpleframework.test.TestHandle.java

              |-------Handle  net.simpleframework.test.TestPagerHandle.java

         WebRoot(模块展现)

              |-------jsp   test.jsp

              |-------xml  test.xml

 

 

 

3.  运行,见证效果。(如果你以为实现下图的功能会很麻烦,请下面看4个文件的代码)


 

 


 

3.1 首先介绍原生态的 test.jsp.

 

<%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%>

 

<table width="550" cellpadding=6 cellspacing=0 border=1 align="center">    

    <tr>

      <td> <h1 align="center">基于SimpleFramework 开发新增查询</h1></td>

    </tr>

</table>

<!--  -->

<table width="550" cellpadding=6 cellspacing=0 border=1 align="center" id="ajaxTestParams">

    <tr>

       <td>产品名称:<input type="text" id="name" name="name" /></td>

    </tr>

    <tr>

       <td>产品描述:<input type="text" id="description" name="description" /></td>

    </tr>

    <tr>

       <td>产品版本:<input type="text" id="version" name="version" /></td>

    </tr>

    <tr>

       <td><input type="button" name="Add" value="Add" onclick="$Actions['TestSave']();"></td>

    </tr>

   

    <!--  -->

    <tr>

       <td id="testTablePager"></td>

    </tr>

</table>

 

3.2 介绍 test.xml.

 

<?xml version="1.0" encoding="UTF-8"?>

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:noNamespaceSchemaLocation="/xsd/default/simple.xsd">

  <scriptEval>first</scriptEval>

  <components>

   

    <ajaxRequest name="TestSave"

           handleClass="net.simpleframework.test.TestHandle"

           handleMethod="doSave"

           formSelector="#ajaxTestParams">

    </ajaxRequest>

   

 

    <tablePager name="testTablePager" containerId="testTablePager"

           handleClass="net.simpleframework.test.TestPagerHandle">

           <columns>

              <column columnName="name" columnText="产品名称" separator="true" style="text-align: center;width: 120px;"

                  headerStyle="width: 120px;" />

              <column columnName="description" columnText="产品描述"  separator="true" style="text-align: center;width: 120px;"

                  headerStyle="width: 120px;" />

              <column columnName="version" columnText="产品版本"  separator="true" style="text-align: center;width: 120px;"

                  headerStyle="width: 120px;" />

           </columns>

           <jsRowClick>

              alert(item);

           </jsRowClick>

    </tablePager>

  </components>

</page>

 

 

3.3 介绍 TestHandle.java

 

public class TestHandle extends AbstractAjaxRequestHandle{

   

    public IForward doSave(final ComponentParameter compParameter) throws Exception {

      

       final DataSource dataSource = IWebApplication.Instance.getWebApplication().getDataSource();

       Table table = new Table("simple_framework_test");

       ITableEntityManager entityManager = DataObjectManagerFactory.getTableEntityManager(dataSource,table);        

       Map<String, Comparable> insertData = new HashMap<String, Comparable>();

insertData.put("id",(Comparable)ID.Utils.newID(entityManager.nextIncValue("id")));

       insertData.put("version", compParameter.getRequestParameter("version"));

       insertData.put("name", compParameter.getRequestParameter("name"));

       insertData.put("description", compParameter.getRequestParameter("description"));

       entityManager.insert(insertData);

       return new UrlForward("/test/test.jsp?p=testTablePager");

    }

}

 

3.4 介绍 TestPagerHandle.java 表格展现带分页.

 

public class TestPagerHandle extends AbstractTablePagerHandle{

    @Override

    public Object getBeanProperty(final ComponentParameter compParameter, final String beanProperty) throws Exception {

       if ("title".equals(beanProperty)) {

           final StringBuilder sb = new StringBuilder();

           sb.append("<a style=\"margin-left: 10px;\" onclick=\"$Actions['")

                  .append(compParameter.componentBean.getName())

                  .append("'].exportFile(null, false);\">导出</a>");

           return sb.toString();

       }

       return super.getBeanProperty(compParameter, beanProperty);

    }

    @SuppressWarnings({ "rawtypes", "unchecked" })

    @Override

    public IDataObjectQuery<?> createDataObjectQuery(final ComponentParameter compParameter) throws Exception {  

       final DataSource dataSource = IWebApplication.Instance.getWebApplication().getDataSource();

       final IQueryEntityManager queryManager = DataObjectManagerFactory.getQueryEntityManager(dataSource);

       final IDataObjectQuery<Map<String, Object>> data = queryManager.query(new SQLValue("SELECT * FROM simple_framework_test s"));

       return data;

    }

}

 

下一篇会对该文章做详细的补充。

加载中
0
红薯
红薯

哈哈,oschina的讨论区还不会加精,此功能下一步开发中。

0
upsimple
upsimple

多谢红薯,我们要打造真才实料的社区,期待你的新功能。

0
G.
G.

引用来自#3楼“upsimple”的帖子

多谢红薯,我们要打造真才实料的社区,期待你的新功能。

好!

那我就来助威呐喊!

0
upsimple
upsimple

如果大家觉得我哪里没有说清楚,可以贴出来,争取可以解答大家的疑问。

返回顶部
顶部