zoukankan      html  css  js  c++  java
  • 使用 ExtJS4 MVC 示例

    task/new.jsp

      1 <%@ page language="java" pageEncoding="UTF-8"%>
      2 
      3 <%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
      4 
      5 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
      6 
      7 <%
      8 
      9 String parentId = request.getParameter( "parentId" ) ;     
     10 String parentLatestEditionId = request.getParameter( "parentLatestEditionId" ) ;     
     11 String originId = request.getParameter( "originId" ) ;     
     12 String parentNodePath = request.getParameter("parentNodePath") ;
     13 String rootId = request.getParameter("rootId") ;
     14 
     15 if ( parentId==null || parentId.equals(""))    parentId = "-1" ;
     16 if ( parentLatestEditionId==null || parentLatestEditionId.equals(""))    parentLatestEditionId = "-1" ;
     17 
     18 /*
     19    当回复时,只能回复最新的版本,历史版本不能被回复 
     20 */
     21 int intParentId = Integer.valueOf( parentId ).intValue() ;
     22 int intParentLatestEditionId = Integer.valueOf( parentLatestEditionId ).intValue() ;
     23 if ( intParentId > 0 && intParentId != intParentLatestEditionId ){
     24     out.println("<h1 style='color : red ;'>!!! 致命错误:历史版本不可以被回复。!!!</h1>") ; 
     25 } ;
     26 
     27 if ( originId==null || originId.equals(""))
     28     originId = "-1" ;
     29 
     30 
     31 if ( parentNodePath==null || "".equals(parentNodePath))
     32     parentNodePath = "" ;
     33 
     34 if( rootId==null || "".equals(rootId) )
     35     rootId = "-1" ;
     36 
     37 
     38 int intOriginId = Integer.valueOf( originId ).intValue() ;
     39 
     40 if ( intParentId > 0 )    out.println("<h1 style='color : red ;'>《 回 复 》</h1>") ;
     41 else if ( intOriginId > 0 )    out.println("<h1 style='color : red ;'>《 修 改 》</h1>") ;
     42 else out.println("<h1 style='color : red ;'>《 新 增 》</h1>") ;
     43 
     44 
     45 
     46 %>
     47 
     48 
     49 <%
     50     String path = request.getContextPath( ) ;
     51     String basePath = request.getScheme( )+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
     52 %>
     53 
     54 <!-- 
     55 
     56     2013 0706 Livon
     57     - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
     58     @ 本页的访问地址: 
     59     http://localhost:8080/squadronMonitor/user/main.jsp?groupCode=user
     60     
     61     http://localhost:8080/fengTask/task!insert.action?bean.taskContent=0
     62 
     63 -->
     64 
     65 <html>
     66 <head>
     67 
     68     <base href="<%=basePath%>">
     69 
     70     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     71     <meta http-equiv="Access-Control-Allow-Origin" content="*">
     72     
     73     <%@ include file="../inc/link_ExtJS.jsp" %>
     74     <%@ include file="../inc/css.jsp" %>
     75     
     76     <script type="text/javascript" >
     77     
     78     var baseHref = "<%=basePath%>" ;
     79     
     80     var task = {} ;    
     81     task.originId = '<%=originId %>' ;
     82     task.parentId = '<%=parentId %>' ;
     83     task.userName = '<%=request.getRemoteUser() %>' ;
     84     task.rootId = '<%=rootId %>' ;
     85     task.parentNodePath = '<%=parentNodePath %>' ;
     86 
     87 
     88         var loginedUser = {
     89                 userName : '<%= request.getRemoteUser( ) %>' ,
     90                 userRole : '<%= request.getAuthType( ) %>'
     91         } ;
     92         
     93     </script>
     94     
     95     
     96     <script type="text/javascript" src="task/new.js" charset="UTF-8"></script>
     97     
     98     
     99     <link rel="stylesheet" href="/KindEditor/themes/default/default.css" />
    100     <link rel="stylesheet" href="/KindEditor/plugins/code/prettify.css" />    
    101 
    102     <script charset="utf-8" src="/KindEditor/kindeditor.js"></script>
    103     <script charset="utf-8" src="/KindEditor/lang/zh_CN.js"></script>
    104     
    105     <script charset="utf-8" src="/KindEditor/plugins/code/prettify.js"></script>
    106     
    107     <script>
    108     
    109             KindEditor.ready(function(K) {
    110                 
    111                 var options = {
    112                         cssPath : '/css/index.css',
    113                         filterMode : true ,
    114                         uploadJson : 'task/kindEditorUpload.jsp',
    115                         fileManagerJson : 'task/file_manager_json.jsp' ,
    116                         allowFileManager : true ,
    117                         afterCreate : function() {
    118                             var self = this;
    119                             K.ctrl(document, 13, function() {
    120                                 self.sync();
    121                                 // document.forms['example'].submit();
    122                             });
    123                             K.ctrl(self.edit.doc, 13, function() {
    124                                 self.sync();
    125                                 // document.forms['example'].submit();
    126                             });
    127                         } // end of afterCreate ( )
    128                 };
    129                 kindEditor = K.create('textarea[name="bean.taskContent"]', options);
    130 
    131                 prettyPrint();
    132                 
    133             });
    134             
    135             consoleLog('I am ready.');
    136             
    137     </script>
    138     
    139      
    140     <title>新增 | 修改 | 回复</title>
    141     
    142 </head>
    143 <body style="padding : 5px ; "><!-- 
    144         
    145         
    146     <form name="example" method="post" action="../task!insert.action">
    147                    <textarea id="taskContent_textArea" name="bean.taskContent" cols="100" rows="8" style="700px;height:200px;visibility:hidden;">
    148                123456
    149            </textarea>
    150            
    151         <br />
    152         <input type="submit" name="button" value="提交内容" /> (提交快捷键: Ctrl + Enter)
    153     </form> -->
    154     
    155     <div id="data_panel">
    156         
    157     </div>
    158     <form id="task_form" name="example" method="post" action="task!insert.action" >
    159     
    160         <span style="color: gray ; "><b>主题 : </b></span>
    161         <input type="text" autocomplete="off" class="x-form-field x-form-required-field x-form-text  " value="(必填内容)" 
    162                         name="bean.taskTitle" size="1"  style=" 660px ; margin: 10px 5px 10px 5px ; ">
    163         
    164         <textarea name="bean.taskContent" cols="100" rows="8" style=" 100% ; height:350px;visibility:hidden;"></textarea>
    165 
    166         <br />
    167         <input type="button" name="button" onclick="fnc.formSubmit();" value="提交内容" />
    168         <span style="color: gray ; "> ( 提交快捷键: Ctrl + Enter )</span>
    169         <p>指派任务:<input id="number" name="bean.userNumber" size="50" /><span style="color: gray ; "> ( 输入指派人number 用,分隔; )</span></p>
    170         <p>涉及的技术 :<input id="tag" name="bean.tagNumbers" size="50" /><span style="color: gray ; "> ( 输入技术categoryNumber 用,分隔; )</span></p>
    171         <p style="border-top: 1px dotted gray ; text-align : right ; ">
    172             userName:<%= request.getRemoteUser() %> |
    173             originId : <%= originId %> |
    174             parentId :<%= parentId %> |
    175             <a href="../j_spring_security_logout">退出登录</a></p>
    176     </form>
    177     <div style="color : gray ;">
    178     <h3>说明:</h3>
    179     <ol>
    180         <li>如果 uri 中无参数 ,表示新插入一条记录</li>
    181         <li>如果 uri 参数中 parentId > 0 & rootId > 0 &parentNodePath != ''或者 !=null ,表示 回复(评论/备注/留言) </li>
    182         <li>如果 uri 参数中 originId > 0 ,表示修改 </li>
    183     </ol>
    184     </div>
    185 </body>
    186 </html>

    task/new.js

      1 Ext.Loader.setConfig({enabled: true});
      2 
      3  
      4 
      5  
      6 
      7  
      8 
      9 Ext.application({
     10 
     11        name : 'i',// 为应用程序起一个名字,相当于命名空间
     12 
     13       
     14 
     15        controllers : [
     16 
     17                       // 'SearchCtrler','LogGridCtrl'
     18 
     19                       'task.NewCtrl' // 这是文件名
     20 
     21                       ] , // 声明所用到的控制层
     22 
     23        // controllers : ['SearchCtrler'] , // 声明所用到的控制层
     24 
     25       
     26 
     27        launch : function() {// 开始
     28 
     29              
     30 
     31               consoleLog('2013.11.01 13:48') ;
     32 
     33              
     34 
     35               Ext.create('i.view.task.NewFormView') ;
     36 
     37              
     38 
     39               Ext.create('Ext.Button', {
     40 
     41                   text: 'Click me',
     42 
     43                   renderTo: Ext.getBody(),
     44 
     45                   handler: function() {
     46 
     47                       // alert('You clicked the button!');
     48 
     49                   Ext.create('i.view.task.NewWindowView').show( ) ; // 这个控制代码应该写在 controller 下
     50 
     51                   }
     52 
     53               });
     54 
     55              
     56 
     57 //           Ext.create('Ext.container.Viewport', {
     58 
     59 //            layout: 'fit',
     60 
     61 //            items: [
     62 
     63 //                {
     64 
     65 //                    xtype: 'SearchGridView'
     66 
     67 //                }
     68 
     69 //            ]
     70 
     71 //        });
     72 
     73  
     74 
     75        }
     76 
     77 });
     78 
     79  
     80 
     81    
     82 
     83  
     84 
     85 var fnc = {
     86 
     87               // 页面表单提交
     88 
     89               formSubmit : function(){
     90 
     91                      // 获取KindEdtor textarea中的值
     92 
     93                      var taskContent =  kindEditor.html();
     94 
     95                      // 使用ExtJS的query获取 Html的DOM ,取值
     96 
     97                      var taskTitle = Ext.query( '#task_form input[name=bean.taskTitle]')[0].value ; // 值 OK
     98 
     99                      // 使用ExtJS的query获取 Html的DON ,取值
    100 
    101                      var arrayUserNumbers = [] ;
    102 
    103                      var tagNumbers = [];
    104 
    105                      if( Ext.getDom('number').value.length!=0 ){
    106 
    107                             arrayUserNumbers = Ext.getDom('number').value.split(",") ;
    108 
    109                      }
    110 
    111                      if( Ext.getDom('tag').value.length!=0 ){
    112 
    113                             tagNumbers = Ext.getDom('tag').value.split(",") ;
    114 
    115                      }
    116 
    117 //                  consoleLog('arrayUserNumbers :');
    118 
    119 //                  consoleLog(arrayUserNumbers.length );
    120 
    121 //                  alert(arrayUserNumbers.length);
    122 
    123                     
    124 
    125                      // Ajax
    126 
    127                      Ext.Ajax.request({
    128 
    129                          url: 'task!insert.action' ,
    130 
    131                          params: {
    132 
    133                          'bean.originId' : task.originId , // 原始ID
    134 
    135                          'bean.parentId' : task.parentId , // 父ID
    136 
    137                          'bean.latestCommentId' : task.latestCommentId , //
    138 
    139                          'bean.userName' : task.userName , // 发布者姓名
    140 
    141                          'bean.rootId' : task.rootId , //
    142 
    143                          'bean.parentNodePath' : task.parentNodePath , // 父地址
    144 
    145                          'bean.taskContent' : taskContent , // 内容
    146 
    147                          'bean.taskTitle' : taskTitle  ,// 标题
    148 
    149                          'bean.userNumbers' : arrayUserNumbers ,//指派用户Number
    150 
    151                          'bean.tagNumbers' : tagNumbers     //标签
    152 
    153                          },
    154 
    155                          success: function( response ){
    156 
    157  
    158 
    159                                    var json = Ext.JSON.decode( response.responseText );
    160 
    161                                    var taskId = 0 ;
    162 
    163                                    Ext.Array.each(  json.rowList , function( record, index, itSelf ) {
    164 
    165                                           // kindEditor.html(record.taskContent);
    166 
    167                                           consoleLog( record.id ) ;
    168 
    169                                           taskId = record.id ;
    170 
    171                                    });
    172 
    173                           alert("发布成功!");
    174 
    175                           window.location = "task/item.jsp?id=" + taskId ;
    176 
    177                          
    178 
    179                          },
    180 
    181                          failure: function( resp,opts ) { // 失败
    182 
    183                                  var respText = Ext.util.JSON.decode(resp.responseText);  
    184 
    185                                  Ext.Msg.alert('错误', respText.error);  
    186 
    187                          }  
    188 
    189                      });
    190 
    191               } ,
    192 
    193  
    194 
    195 //-----------------------------加载 task_info信息---------------------------------------
    196 
    197  
    198 
    199               // 获取任务信息
    200 
    201               getTaskInfo : function(){
    202 
    203                      // Ajax
    204 
    205                      Ext.Ajax.request({               
    206 
    207                             url: 'task!selectList.action' ,
    208 
    209                             params: {
    210 
    211                                    'bean.id' : task.originId ,
    212 
    213                                    'limit' : 1 ,
    214 
    215                                    'bean.unusefulValue' : ''
    216 
    217                             },
    218 
    219                             success: function( response ){
    220 
    221                                    var json = Ext.JSON.decode( response.responseText );
    222 
    223                                   
    224 
    225                                    Ext.Array.each(  json.rowList , function( record, index, itSelf ) {
    226 
    227                                           Ext.query( '#task_form input[name=bean.taskTitle]')[0].value = record.taskTitle; // 值 OK
    228 
    229                                           kindEditor.html(record.taskContent);
    230 
    231                                           task.rootId = record.rootId ;
    232 
    233                                           task.parentId = record.parentId ;
    234 
    235                                           task.latestCommentId = record.latestCommentId ;
    236 
    237                                    });
    238 
    239                             },
    240 
    241                             failure: function( resp,opts ) { // 失败
    242 
    243                                    var respText = Ext.util.JSON.decode(resp.responseText);  
    244 
    245                                    Ext.Msg.alert('错误', respText.error);  
    246 
    247                             }  
    248 
    249                      });
    250 
    251               }
    252 
    253                                   
    254 
    255 }
    256 
    257 ;
    258 
    259  
    260 
    261  
    262 
    263  
    264 
    265  
    266 
    267              
    268 
    269              
    270 
    271              
    272 
    273  
    274 
    275  
    276 
    277 var start = function(){
    278 
    279  
    280 
    281        // Ext.tip.QuickTipManager.init() ;
    282 
    283       
    284 
    285                      // 延时启动
    286 
    287        if(task.originId > 0){
    288 
    289               setTimeout( function(){
    290 
    291                      // fnc.getUserInfo( loginedUser ) ;
    292 
    293                      fnc.getTaskInfo() ;
    294 
    295                      }, 500 ) ;
    296 
    297              
    298 
    299        }
    300 
    301       
    302 
    303 } ; // start
    304 
    305  
    306 
    307 Ext.onReady( function () {
    308 
    309        start() ;
    310 
    311 });
    312 
    313  
    314 
    315  

    app/controller/task/NewCtrl.js

      1 /*
      2 商品控制层,
      3 所有逻辑代码都在这里写
      4  */
      5 
      6 Ext.define(    
      7 
      8     'i.controller.task.NewCtrl' ,
      9     
     10     {
     11         extend : 'Ext.app.Controller',
     12         stores : [ 
     13                 // 'LogStore' 
     14             ],
     15         models : [ 
     16                 // 'LogModel' 
     17             ],
     18         views : [ 
     19                 // 'log.SearchGridView','log.SearchFormWinView' 
     20                 // task.NewWindowView
     21                 'task.NewWindowView' // 文件名
     22                 , 'task.NewFormView'
     23             ],
     24         refs : [
     25             {
     26                 ref : 'taskNewWindow_view',
     27                 selector : 'task.NewWindowView'
     28             } ,
     29             {
     30                 ref : 'NewForm', // 为了 setter 和 getter 方法
     31                 selector : 'taskNewFormView' // 这里用别名
     32             } 
     33         ],
     34         init : function() {
     35 
     36             consoleLog( '2013.11.01 13:59' ) ;
     37             consoleLog( this ) ;
     38             
     39             // 创建 Windows (2013.11.01 Livon)
     40             
     41             this.control({
     42                 //弹出搜索框
     43                 'viewport > SearchGridView': {
     44                     afterrender: function( gp ){ // 侦听 SearchGirdView 渲染
     45                         gp.down('button[action=onSearch]').on('click',function(){
     46                             // 侦听 SearchGirdView 工具条上 action=onSearch 的按钮单击事件
     47                             this.showWin();
     48                         },this);
     49                         gp.down('button[action=onNew]').on('click',function(){
     50                             // 侦听 SearchGirdView 工具条上 action=onSearch 的按钮单击事件
     51                             window.open('task/new.jsp');
     52                         },this );
     53                     }
     54                 } ,
     55                 
     56                 'taskNewFormView button[action=onPrePage]' : {
     57                     click : function(){
     58                         consoleLog( '2013.11.01 14:17' ) ;
     59                     }
     60                 } ,
     61                 
     62                 'taskNewFormView button[action=show_selectUserWindow]' : {
     63                     click : function(){
     64                         consoleLog( '2013.11.01 14:47' ) ;
     65                         this.show_selectUserWindow( ) ;
     66                     }
     67                 } ,
     68                 
     69                 // 
     70                 
     71                 'taskNewFormView items[name=SearchByKeyWord]' : {
     72                     focus : function(){
     73                         consoleLog( '2013.11.01 14:23' ) ;
     74                     }
     75                 } ,
     76                 
     77                 
     78                 'taskNewWindowView button[action=ok]' : { // taskNewWindowView 是别名!!!!
     79 //                'NewForm button[action=ok]' : {
     80                     click : function(){
     81                         // this.taskInfo();
     82                         consoleLog( '2013.11.01 15:21' ) ;
     83                         var f = this.getNewForm( ) ;
     84 //                        consoleLog( f ) ;
     85 //                        consoleLog( f.getForm( ) ) ;
     86 //                        consoleLog( f.getForm( ).getValues( ) ) ;
     87                         var v = f.getForm( ).getValues( ) ;
     88                         consoleLog( v.startDate  ) ;
     89                     }
     90                 } ,
     91                 
     92                 '#number' : {
     93                     click : function(){
     94                         consoleLog( '2013.11.01 13:58' ) ;
     95                     }
     96                 }
     97                 
     98             }); // this.control
     99         } // init ( )
    100     
    101     , show_selectUserWindow : function( ) {
    102         Ext.create('i.view.task.NewWindowView').show( ) ;
    103     }
    104     
    105     
    106     }) ; // define

    app/task/NewFormView.js

      1 /*!
      2 * 搜索表单view层,这里只是一个负责显示的grid,没有逻辑代码
      3 */
      4 consoleLog( this ) ;
      5 
      6 Ext.define('i.view.task.NewFormView' ,
      7     Ext.create('Ext.form.Panel', {
      8     // renderTo : Ext.getBody(),
      9     store: 'SearchStore',
     10     alias : 'widget.taskNewFormView',
     11     // renderTo : 'form_holder_td' ,
     12     renderTo : Ext.getBody() ,
     13     draggable : true ,
     14     title : 'Search Form ',
     15     // height : 180,
     16     width : 480,
     17     collapsible : true ,
     18     bodyPadding : 10,
     19     defaultType : 'textfield',
     20     // layout: 'auto',
     21     url : '', // 提交地址
     22     
     23 
     24     defaults: {
     25         anchor: '100%',
     26         labelWidth: 100
     27     },
     28     
     29     items : [ 
     30                 {
     31                     xtype: 'fieldcontainer',
     32                     fieldLabel: '相关人员',
     33                     combineErrors: true,
     34                     msgTarget : 'side',
     35                     layout: 'hbox',
     36                     defaults: {
     37                         hideLabel: true
     38                     },
     39                     items: [
     40                         {
     41                             xtype     : 'textfield',
     42                             name      : 'startDate',
     43                             fieldLabel: 'Start',
     44                             margin: '0 5 0 0',
     45                             flex: 1,
     46                             allowBlank: false
     47                         },
     48                         {
     49                             xtype:'button',  
     50                             text: 'Select',  
     51                             // 50 , 
     52                             action : 'show_selectUserWindow'
     53                         }
     54                     ]
     55                 },
     56                 
     57                 {
     58         fieldLabel : 'SearchByName',
     59         name : 'SearchByName'
     60     }, {
     61         fieldLabel : 'SearchByTag',
     62         name : 'SearchByTag'
     63     }, {
     64         fieldLabel : 'Search By Key Word',
     65         name : 'SearchByKeyWord'
     66     } ,
     67     {
     68 
     69         xtype : 'fieldcontainer',
     70         // layout: 'hbox',
     71         combineErrors: true,
     72         msgTarget: 'side',
     73         fieldLabel: 'Full Name',
     74         defaults: {
     75             hideLabel: true
     76         },
     77         items : [
     78             {
     79                 //the width of this field in the HBox layout is set directly
     80                 //the other 2 items are given flex: 1, so will share the rest of the space
     81                           65,
     82 
     83                 xtype:          'combo',
     84                 mode:           'local',
     85                 value:          'mrs',
     86                 triggerAction:  'all',
     87                 forceSelection: true,
     88                 editable:       false,
     89                 fieldLabel:     'Title',
     90                 name:           'title',
     91                 displayField:   'name',
     92                 valueField:     'value',
     93                 queryMode: 'local',
     94                 store:          Ext.create('Ext.data.Store', {
     95                     fields : ['name', 'value'],
     96                     data   : [
     97                         {name : 'Mr',   value: 'mr'},
     98                         {name : 'Mrs',  value: 'mrs'},
     99                         {name : 'Miss', value: 'miss'}
    100                     ]
    101                 })
    102             },
    103             {
    104                 xtype: 'textfield',
    105                 flex : 1,
    106                 name : 'firstName',
    107                 fieldLabel: 'First',
    108                 allowBlank: false
    109             },
    110             {
    111                 xtype: 'textfield',
    112                 flex : 1,
    113                 name : 'lastName',
    114                 fieldLabel: 'Last',
    115                 allowBlank: false,
    116                 margins: '0'
    117             }
    118         ]
    119     }
    120     
    121     
    122     ],
    123     buttons : [ {
    124         text: 'prePage',  
    125         action : 'onPrePage'
    126     }, {
    127         text: 'nexPage',  
    128         action : 'onNexPage'
    129     }, {
    130         text : 'Search',
    131         action: 'onSubmit'
    132     } ]
    133 })
    134 );

    app/task/NewWindowView.js

     1 /**
     2 这里只是一个负责显示的窗口
     3 */
     4 
     5 Ext.define(
     6         'i.view.task.NewWindowView', 
     7         
     8         {
     9     extend: 'Ext.window.Window',
    10     alias : 'widget.taskNewWindowView', // 别名似乎没用 !?
    11     title : '测试',
    12     autoShow: false,
    13     height: 200,
    14      300,
    15     items : [
    16 //             Ext.create('i.view.task.NewFormView')
    17 
    18             Ext.create('Ext.form.Panel', {
    19                 // draggable : true ,
    20                 title : 'Search Form '
    21             })
    22     
    23     
    24              ] ,
    25     initComponent: function() {
    26         this.buttons = [
    27             {
    28                 text: '点我改变标题',
    29                 scope: this,
    30                 action: 'ok'
    31             } ,
    32             {
    33                 text: '关闭',
    34                 scope: this,
    35                 handler: function(){
    36                     this.close() ;
    37                     console.log( 'clicked' ) ;
    38                 }
    39             } ,
    40             
    41 //            Ext.create('search.view.goods.CloseWindowButtonView')
    42             
    43         ];
    44         this.callParent( arguments ) ;
    45     }
    46 });
  • 相关阅读:
    bat学习
    Eclipse调试方法及快捷键
    JDK中的设计模式
    开源-自由-乔布斯
    AOP
    编程语言
    [LeetCode] 160. Intersection of Two Linked Lists(两个单链表的交集)
    [LeetCode] 198. House Robber(小偷)
    [LeetCode] 155. Min Stack(最小栈)
    [LeetCode] 1. Two Sum(两数之和)
  • 原文地址:https://www.cnblogs.com/livon/p/3402365.html
Copyright © 2011-2022 走看看