`
shaohan126448
  • 浏览: 113071 次
  • 来自: 北京
社区版块
存档分类
最新评论

extjs-tag (即使不会extjs和js也能开发页面)

阅读更多

最近在做一个公司的框架,采用extjs+dwr,由于考虑到extjs的学习曲线,希望开发人员即便不会也能使用,于是我就打算用jsp自定义标签来实现。我觉得凡是用ext框架的公司都会用标签或者其他方式生成一些ext代码,否则多麻烦啊。

由于刚开始接触extjs,所以很多用法都在探索中。有不妥的地方请指正

 

 

效果图:

 

 看看,jsp多简洁,开发人员用起来会很舒服

Jsp代码 复制代码
  1. <stk-ui:panel width="400" title="测试">   
  2.   
  3.     <form action="/login.jsp" id="testForm1">   
  4.   
  5.         姓名:<stk-ui:textField id="t1"/><br>   
  6.   
  7.         <stk-ui:formButton text="提交" btnType="submit" formId="testForm1"/>   
  8.   
  9.     </form>   
  10.   
  11. </stk-ui:panel>  
<stk-ui:panel width="400" title="测试">

    <form action="/login.jsp" id="testForm1">

        姓名:<stk-ui:textField id="t1"/><br>

        <stk-ui:formButton text="提交" btnType="submit" formId="testForm1"/>

    </form>

</stk-ui:panel>

  

 panel.ftl

 

Freemark代码 复制代码
  1. <div id="${parameters.id}Div">   
  2.     <div id="${parameters.id}El" class="x-hidden" align="center">   
  3. <script type="text/javascript">   
  4.     Ext.onReady(function()   
  5.     {   
  6.         new Ext.Panel({   
  7.             <#if parameters.frame?exists>   
  8.                 frame:${parameters.frame},   
  9.             </#if>   
  10.             <#if parameters.title?exists>   
  11.                 title:'${parameters.title}',   
  12.             </#if>   
  13.             <#if parameters.bodyStyle?exists>   
  14.                 bodyStyle:'${parameters.bodyStyle}',   
  15.             </#if>   
  16.             <#if parameters.autoLoad?exists>   
  17.                 autoLoad:'${parameters.autoLoad}',   
  18.             </#if>   
  19.             <#if parameters.autoScroll?exists>   
  20.                 autoScroll:${parameters.autoScroll},   
  21.             </#if>   
  22.             <#if parameters.collapsible?exists>   
  23.                 collapsible:'${parameters.collapsible}',   
  24.             </#if>   
  25.             <#if parameters.height?exists>   
  26.                 height:${parameters.height},   
  27.             </#if>   
  28.             <#if parameters.x?exists>   
  29.                 x:${parameters.x},   
  30.             </#if>   
  31.             <#if parameters.y?exists>   
  32.                 y:${parameters.y},   
  33.             </#if>   
  34.             width: '${parameters.width}',   
  35.             defaults: {width: (${parameters.width}-30)},   
  36.             renderTo:'${parameters.id}Div',   
  37.             id:'${parameters.id}',   
  38.             items: new Ext.Container({   
  39.                 el:'${parameters.id}El'  
  40.             })   
  41.         });   
  42.         $("#${parameters.id}El").removeClass("x-hidden");   
  43.     });   
  44. </script>  
<div id="${parameters.id}Div">
    <div id="${parameters.id}El" class="x-hidden" align="center">
<script type="text/javascript">
    Ext.onReady(function()
    {
        new Ext.Panel({
            <#if parameters.frame?exists>
                frame:${parameters.frame},
            </#if>
            <#if parameters.title?exists>
                title:'${parameters.title}',
            </#if>
            <#if parameters.bodyStyle?exists>
                bodyStyle:'${parameters.bodyStyle}',
            </#if>
            <#if parameters.autoLoad?exists>
                autoLoad:'${parameters.autoLoad}',
            </#if>
            <#if parameters.autoScroll?exists>
                autoScroll:${parameters.autoScroll},
            </#if>
            <#if parameters.collapsible?exists>
                collapsible:'${parameters.collapsible}',
            </#if>
            <#if parameters.height?exists>
                height:${parameters.height},
            </#if>
            <#if parameters.x?exists>
                x:${parameters.x},
            </#if>
            <#if parameters.y?exists>
                y:${parameters.y},
            </#if>
            width: '${parameters.width}',
            defaults: {width: (${parameters.width}-30)},
            renderTo:'${parameters.id}Div',
            id:'${parameters.id}',
            items: new Ext.Container({
                el:'${parameters.id}El'
            })
        });
        $("#${parameters.id}El").removeClass("x-hidden");
    });
</script>

 

 

button.ftl 和 textField.ftl省略,标签类也省略

tr

生成的代码:

Java代码 复制代码
  1. <div id="5068fb04-a387-4091-9c70-9810fe47ee6aDiv">   
  2.     <div id="5068fb04-a387-4091-9c70-9810fe47ee6aEl" class="x-hidden" align="center">   
  3.         <script type="text/javascript">   
  4.         Ext.onReady(function()   
  5.         {   
  6.             new Ext.Panel({   
  7.                     frame:true,   
  8.                     title:'测试',   
  9.                     autoScroll:true,   
  10.                 width: '400',   
  11.                 defaults: {width: (400-30)},   
  12.                 renderTo:'5068fb04-a387-4091-9c70-9810fe47ee6aDiv',   
  13.                 id:'5068fb04-a387-4091-9c70-9810fe47ee6a',   
  14.                 items: new Ext.Container({   
  15.                     el:'5068fb04-a387-4091-9c70-9810fe47ee6aEl'  
  16.                 })   
  17.             });   
  18.             $("#5068fb04-a387-4091-9c70-9810fe47ee6aEl").removeClass("x-hidden");   
  19.         });   
  20.         </script>   
  21.   
  22.         <form action="/login.jsp" id="testForm1">   
  23.             姓名:<span id="t1TextSpan"></span>   
  24.     <script type="text/javascript">   
  25.       Ext.onReady(function()   
  26.       {   
  27.          Ext.QuickTips.init();   
  28.          new Ext.form.TextField   
  29.          ({   
  30.                 renderTo:'t1TextSpan',   
  31.                 id:'t1'  
  32.         });   
  33.     });   
  34.     </script>   
  35.         <br>   
  36.         <span id="9c9e1b2f-7544-4210-a71e-af4336a7f580BtnSpan" style="width:1px;"></span>   
  37.     <script type="text/javascript">   
  38.             Ext.onReady(function()   
  39.             {   
  40.                     new Ext.Button({   
  41.                             type:'submit',   
  42.                             handler:function(){document.getElementById('testForm1').submit();},   
  43.                         text:'提交',   
  44.                         id:'9c9e1b2f-7544-4210-a71e-af4336a7f580',   
  45.                         renderTo:'9c9e1b2f-7544-4210-a71e-af4336a7f580BtnSpan'  
  46.                     });   
  47.             });   
  48.     </script>   
  49.     </form>   
  50.     </div>   
  51. </div>  
<div id="5068fb04-a387-4091-9c70-9810fe47ee6aDiv">
    <div id="5068fb04-a387-4091-9c70-9810fe47ee6aEl" class="x-hidden" align="center">
        <script type="text/javascript">
	    Ext.onReady(function()
	    {
	        new Ext.Panel({
	                frame:true,
	                title:'测试',
	                autoScroll:true,
	            width: '400',
	            defaults: {width: (400-30)},
	            renderTo:'5068fb04-a387-4091-9c70-9810fe47ee6aDiv',
	            id:'5068fb04-a387-4091-9c70-9810fe47ee6a',
	            items: new Ext.Container({
	                el:'5068fb04-a387-4091-9c70-9810fe47ee6aEl'
	            })
	        });
	        $("#5068fb04-a387-4091-9c70-9810fe47ee6aEl").removeClass("x-hidden");
	    });
        </script>

        <form action="/login.jsp" id="testForm1">
            姓名:<span id="t1TextSpan"></span>
	<script type="text/javascript">
	  Ext.onReady(function()
	  {
	     Ext.QuickTips.init();
	     new Ext.form.TextField
	     ({
	            renderTo:'t1TextSpan',
	            id:'t1'
	    });
	});
	</script>
        <br>
        <span id="9c9e1b2f-7544-4210-a71e-af4336a7f580BtnSpan" style="width:1px;"></span>
	<script type="text/javascript">
	        Ext.onReady(function()
	        {
	                new Ext.Button({
	                        type:'submit',
	                        handler:function(){document.getElementById('testForm1').submit();},
	                    text:'提交',
	                    id:'9c9e1b2f-7544-4210-a71e-af4336a7f580',
	                    renderTo:'9c9e1b2f-7544-4210-a71e-af4336a7f580BtnSpan'
	                });
	        });
	</script>
    </form>
    </div>
</div>

 

 

目前已经完成的标签大概有6个,确实遇到不少困难,比如button单独使用会自动换行等问题。唉,不容易啊

 

 

 

这个例子估计相对简单,导致大家有点误解,来看看经过一段时间努力,完成的ajaxGrid的标签:

 

效果图:

 

 

jsp代码,就这么简单。该分页是取部分数据分页而不是全取。合计是全部数据合计。并且扩展了排序功能,能组合排序。还有一点功能需要完善,相信会很好用。

 

Jsp代码 复制代码
  1. <stk-ui:table id="sqlTable" actionName="TestSql" pageSize="8" width="780" height="370" title="Sql例子+双击事件+合计" needDetail="true" needCollect="true">   
  2.     <stk-ui:column property="OpTime" title="操作时间" pattern="yyyy-MM-dd hh:mm:ss"/>   
  3.     <stk-ui:column property="UserCode" title="操作员" key="userinfo" pattern="code|name" parser="translate"/>   
  4.     <stk-ui:column property="OpClass" title="操作类型" parser="dict" key="1086"/>   
  5.     <stk-ui:column property="id" title="金额" collectMethod="SUM,AVG" parser="number" align="right"/>   
  6.     <stk-ui:column property="OpContent" title="操作内容"/>   
  7.     <stk-ui:column property="IpAddr" title="IP地址" cssStyle="color:red"/>   
  8.     <stk-ui:column property="FirstLevel" title="一级菜单" parser="translate" key="menu"/>   
  9.     <stk-ui:column property="SecondLevel" title="二级菜单" parser="translate" key="menu"/>   
  10.     <stk-ui:column property="Memo" title="备注" maxWords="20" needHint="true"/>   
  11. </stk-ui:table>  
<stk-ui:table id="sqlTable" actionName="TestSql" pageSize="8" width="780" height="370" title="Sql例子+双击事件+合计" needDetail="true" needCollect="true">
    <stk-ui:column property="OpTime" title="操作时间" pattern="yyyy-MM-dd hh:mm:ss"/>
    <stk-ui:column property="UserCode" title="操作员" key="userinfo" pattern="code|name" parser="translate"/>
    <stk-ui:column property="OpClass" title="操作类型" parser="dict" key="1086"/>
    <stk-ui:column property="id" title="金额" collectMethod="SUM,AVG" parser="number" align="right"/>
    <stk-ui:column property="OpContent" title="操作内容"/>
    <stk-ui:column property="IpAddr" title="IP地址" cssStyle="color:red"/>
    <stk-ui:column property="FirstLevel" title="一级菜单" parser="translate" key="menu"/>
    <stk-ui:column property="SecondLevel" title="二级菜单" parser="translate" key="menu"/>
    <stk-ui:column property="Memo" title="备注" maxWords="20" needHint="true"/>
</stk-ui:table>

 

其中Action现在可以对应一个类返回Query对象,也可以做成一个xml配置方式。反正还在完善中!

分享到:
评论

相关推荐

    extjs-tag-cloud:Ext JS标签云组件

    extjs-tag-cloud 功劳归于人们@ 我刚刚修改了构造函数接受存储为标签数组。 用法 只需将以下内容添加到您的构造函数树中: { xtype : 'tagcloud' , store : [ 'education' , 'financial' , 'computer' , '...

    ExtJS Jetty启动报错 tag

    org.apache.jasper.JasperException: /WEB-INF/tags/ext/body.tag(105,4) PWC6038: "${empty(extLocation)?"js/ext-2.0":extLocation}" contiene expresiones no válidas: javax.el.ELException: Error Parsing: ...

    ExtJs3.4 扩展的Tags控件

    使用ExtJs的DataView扩展的Tags控件,使用时将Tags.js和tags.css导入页面,将tags文件也放进工程,实例化Tags类即可使用,类的配置项有注释说明。

    unigui0.83.5.820

    - 0000720: Tag property for DBGrid Columns - 0000723: DBGrid: numeric column is not aligned to right - 0000722: Setting Align := alCenter on DBGridColumns does not work - 0000715: OmniHTTPD and ...

    Extjs 继承Ext.data.Store不起作用原因分析及解决

    关于这个原因有很多种,我只说下我遇到的 我这样 写Store来复用的 代码如下: DocStore = Ext.extend(Ext.data.Store,{ initComponent:function(){ this.proxy = new Ext.data.HttpProxy({url:this.url});...

    jquery 插件开发 extjs中的extend用法小结

    在jquery中,extend其实在做插件时还是用的比较多的,今天同时小结jquery和ext js中 的extend用法,先来看jquery中的。 1) extend(dest,src1,src2,src3…); 代码如下: var start = { id: 123, count: 41, desc: ...

    Extjs NumberField后面加单位实现思路

    UnitText.js ======================= 代码如下: // 输入框textfield后面放字unitText定义: Ext.override(Ext.form.TextField, { unitText : ”, onRender : function(ct, position) { Ext.form.TextField....

    非常苛刻的java工作要求

    7、具备良好的编码风格和开发习惯,熟练掌握UML设计工具; 8、熟悉linux或unix操作系统文件系统以及常用命令; 9. 熟悉Tomcat等应用服务器的使用,熟悉LINUX操作系统,熟悉TCP/IP、HTTP等网络协议,掌握多线程编程,...

    GoodProject Maven Webapp.zip

    jQuery EasyUI是基于JQuery的一个前台ui界面的插件,功能相对没extjs强大,但页面也是相当好看的,同时页面支持各种themes以满足使用者对于页面不同风格的喜好。一些功能也足够开发者使用,相对于extjs更轻量。 ...

    ext-2.3.0+CKEditor 3.0.1+ckfinder_asp_1.4配置详解及工程源码

    &lt;script type="text/javascript" src="js/ExtCkeditor.js"&gt; &lt;script type="text/javascript"&gt; Ext.onReady(function(){ Ext.QuickTips.init(); // turn on validation errors beside the field globally //Ext...

    tagtreetest:标签树测试

    安装和配置 为 Postgresql 安装扩展安装 postgresql-contrib 加载 dmoz 数据库psql &lt;dmozltree-eng.sql 发射 Python服务器/ web.py 什么有效 显示标签树 删除标签,包括所有子节点(节点上的右键和删除) ...

Global site tag (gtag.js) - Google Analytics