当前位置: 代码迷 >> JavaScript >> extjs-tag (即或不会extjs和js也能开发页面)
  详细解决方案

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

热度:369   发布时间:2012-11-20 09:55:43.0
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配置方式。反正还在完善中!

  相关解决方案