论坛首页 入门技术论坛

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

浏览 31741 次
该帖已经被评为新手帖
作者 正文
   发表时间:2009-06-16   最后修改:2009-07-03

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

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

 

 

效果图:

 

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

<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

 

<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

生成的代码:

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

 

<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配置方式。反正还在完善中!

   发表时间:2009-06-17  
你这纯属 画蛇添足,限制ext的发挥。
3 请登录后投票
   发表时间:2009-06-17  
好像有ExtTLD 这个东西...

Gxt已经很不错了, 开发跟Swing差不多, 没必要再搞上一层..
1 请登录后投票
   发表时间:2009-06-17  
墓里活人 写道
你这纯属 画蛇添足,限制ext的发挥。


我和你观点不同,当我打开一个文件,上百行js代码的时候,维护起来非常苦难。你以为招熟悉extjs的程序员很容易吗?

限制发挥?怎么限制呢,该有的有用功能全部可用,特殊有难度的,没有阻拦你写js。
0 请登录后投票
   发表时间:2009-06-17  
witcheryne 写道
好像有ExtTLD 这个东西...

Gxt已经很不错了, 开发跟Swing差不多, 没必要再搞上一层..


就拿我们公司来说吧,几乎都是做jsp的,没几人熟悉swing,甚至js能力强的也不多,而且我如果要在老项目加入一点点extjs元素,其实用Gxt很不方便。

ExtTLD,一个不成熟的开源,早就没人维护了。

0 请登录后投票
   发表时间:2009-06-17  
jorwen_fang 写道
witcheryne 写道
好像有ExtTLD 这个东西...

Gxt已经很不错了, 开发跟Swing差不多, 没必要再搞上一层..


就拿我们公司来说吧,几乎都是做jsp的,没几人熟悉swing,甚至js能力强的也不多,而且我如果要在老项目加入一点点extjs元素,其实用Gxt很不方便。

ExtTLD,一个不成熟的开源,早就没人维护了。



我建议你们不要这样用 extjs ,用ext-gwt也比这样用好

extjs 适合 oaop ,纯ajax交互,后期少不了javascript,那时候 jsp tag 就帮不了你了

jsp tag 适合于页面导向的应用
0 请登录后投票
   发表时间:2009-06-18  
yiminghe 写道
jorwen_fang 写道
witcheryne 写道
好像有ExtTLD 这个东西...

Gxt已经很不错了, 开发跟Swing差不多, 没必要再搞上一层..


就拿我们公司来说吧,几乎都是做jsp的,没几人熟悉swing,甚至js能力强的也不多,而且我如果要在老项目加入一点点extjs元素,其实用Gxt很不方便。

ExtTLD,一个不成熟的开源,早就没人维护了。



我建议你们不要这样用 extjs ,用ext-gwt也比这样用好

extjs 适合 oaop ,纯ajax交互,后期少不了javascript,那时候 jsp tag 就帮不了你了

jsp tag 适合于页面导向的应用



我想再琢磨一下,你说的问题应该也能克服。因为我们的tag不仅仅生成extjs,如果用到ajax交互可以用dwr结合起来一起生成。我们公司曾经做过一套这样的类似tag,自己研发的JS-UI + dwr tag用得非常舒服。 我想我只是把自己的JS-UI替换成extjs而已。 如果真的无法解决您提到的问题,再考虑gxt也行,大不了多培训培训员工
0 请登录后投票
   发表时间:2009-06-18  
如果一个JSP页面产生一个纯的JS文件,通过AJAX动态加载脚本,再eval(),实现oaop是没问题的。
0 请登录后投票
   发表时间:2009-06-18   最后修改:2009-06-18
倒是推荐你们试试JSF,感觉JSP能力有限。国内的OperaMasks就是封装的ExtJS,richfaces以及icefaces效果也都很不错。
1 请登录后投票
   发表时间:2009-06-18  
把extjs封装到tag里面能让一般的开发人员更容易上手。
JSF还是等到成熟了再说。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics